├── .gitignore ├── README.md ├── babel.config.js ├── doc └── INSTALLATION.md ├── jest.config.js ├── lerna.json ├── package-lock.json ├── package.json ├── packages ├── backend │ ├── .env.clone │ ├── .gitignore │ ├── .prettierrc │ ├── README.md │ ├── nest-cli.json │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── app.controller.spec.ts │ │ ├── app.controller.ts │ │ ├── app.module.ts │ │ ├── app.service.ts │ │ ├── auth │ │ │ ├── auth.controller.ts │ │ │ ├── auth.module.ts │ │ │ ├── auth.service.ts │ │ │ ├── changePassword.dto.ts │ │ │ ├── jwt.authGuard.ts │ │ │ ├── jwt.strategy.ts │ │ │ ├── mailing │ │ │ │ ├── mailing.service.ts │ │ │ │ └── views │ │ │ │ │ ├── layouts │ │ │ │ │ └── main.hbs │ │ │ │ │ └── resetPassword.hbs │ │ │ ├── resetPassword.dto.ts │ │ │ ├── singIn.dto.ts │ │ │ ├── sql.error.code.ts │ │ │ ├── token.ts │ │ │ ├── token │ │ │ │ ├── token.entity.ts │ │ │ │ └── token.service.ts │ │ │ ├── user.decorator.ts │ │ │ └── users │ │ │ │ ├── enums │ │ │ │ └── ErrorMessage.ts │ │ │ │ ├── models │ │ │ │ └── SignInPayload.ts │ │ │ │ ├── resetPassword.guard.ts │ │ │ │ ├── user.dto.ts │ │ │ │ ├── user.entity.ts │ │ │ │ ├── user.repository.ts │ │ │ │ ├── users.repositoryProvider.ts │ │ │ │ ├── users.service.spec.ts │ │ │ │ └── users.service.ts │ │ ├── config │ │ │ ├── config.service.ts │ │ │ └── scripts │ │ │ │ ├── start.sh │ │ │ │ └── write-type-orm-config.ts │ │ ├── connector │ │ │ ├── connector.module.ts │ │ │ ├── connector.service.spec.ts │ │ │ └── connector.service.ts │ │ ├── files │ │ │ ├── files.controller.spec.ts │ │ │ ├── files.controller.ts │ │ │ └── files.module.ts │ │ ├── firebase-auth │ │ │ ├── dto │ │ │ │ └── google-user.dto.ts │ │ │ ├── exceptions.enum.ts │ │ │ ├── firebase-auth.controller.ts │ │ │ ├── firebase-auth.module.ts │ │ │ └── firebase-auth.service.ts │ │ ├── main.ts │ │ ├── migration │ │ │ ├── 1581198194170-t123.ts │ │ │ ├── 1581198194171-VideosInsert.ts │ │ │ ├── 1581294634846-addCategory.ts │ │ │ ├── 1581295131236-insertCategory.ts │ │ │ ├── 1582983837547-users_table.ts │ │ │ ├── 1598539537716-devices.ts │ │ │ ├── 1599209325975-devices.ts │ │ │ ├── 1600707228300-tokens.ts │ │ │ ├── 1601563388887-YoutubeId.ts │ │ │ ├── 1601564103815-InsertYoutubeId.ts │ │ │ └── 1604340336209-addNameToUser.ts │ │ ├── notifications │ │ │ ├── devices.entity.ts │ │ │ ├── firebaseConfig.ts │ │ │ ├── message.model.ts │ │ │ ├── notification.dto.ts │ │ │ ├── notifications.module.ts │ │ │ ├── notifications.service.spec.ts │ │ │ └── notifications.service.ts │ │ ├── video-stream │ │ │ ├── video-stream.controller.spec.ts │ │ │ ├── video-stream.controller.ts │ │ │ ├── video-stream.module.ts │ │ │ ├── video-stream.service.spec.ts │ │ │ └── video-stream.service.ts │ │ └── videos │ │ │ ├── category.entity.ts │ │ │ ├── videos.controller.spec.ts │ │ │ ├── videos.controller.ts │ │ │ ├── videos.dto.ts │ │ │ ├── videos.entity.ts │ │ │ ├── videos.enum.ts │ │ │ ├── videos.module.ts │ │ │ ├── videos.service.spec.ts │ │ │ ├── videos.service.ts │ │ │ └── videos.validation.pipe.ts │ ├── test │ │ ├── app.e2e-spec.ts │ │ └── jest-e2e.json │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── tslint.json │ ├── webpack.config.js │ └── yarn.lock ├── common │ ├── .gitignore │ ├── README.md │ ├── __tests__ │ │ └── common.test.js │ ├── features │ │ ├── auth │ │ │ └── connectors │ │ │ │ └── index.d.ts │ │ └── videos │ │ │ ├── connector │ │ │ ├── index.d.ts │ │ │ └── index.js │ │ │ └── models │ │ │ └── index.d.ts │ ├── package.json │ ├── src │ │ ├── Const.ts │ │ ├── Enums.ts │ │ ├── auth │ │ │ ├── connectors │ │ │ │ └── index.ts │ │ │ └── models │ │ │ │ └── index.ts │ │ ├── config │ │ │ └── axios │ │ │ │ └── configAxios.ts │ │ ├── firebase-auth │ │ │ ├── connectors │ │ │ │ └── index.ts │ │ │ └── models │ │ │ │ └── index.ts │ │ ├── index.tsx │ │ └── videos │ │ │ ├── connector │ │ │ └── index.ts │ │ │ └── models │ │ │ └── index.ts │ ├── tsconfig.json │ └── yarn.lock ├── frontend │ ├── .env.development │ ├── .env.production │ ├── .env.test │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── firebase-messaging-sw.js │ │ ├── img │ │ │ ├── allerts │ │ │ │ ├── check_list.svg │ │ │ │ ├── team.svg │ │ │ │ └── x.svg │ │ │ ├── check-board.svg │ │ │ ├── dislike.svg │ │ │ ├── email.svg │ │ │ ├── facebook.svg │ │ │ ├── google.svg │ │ │ ├── iconmonstr-arrow-25.svg │ │ │ ├── iconmonstr-arrow-64.svg │ │ │ ├── instagram.svg │ │ │ ├── left.svg │ │ │ ├── lens.svg │ │ │ ├── like.svg │ │ │ ├── logo.svg │ │ │ ├── logout.svg │ │ │ ├── navBarImg │ │ │ │ ├── Oval.png │ │ │ │ ├── allerts.svg │ │ │ │ ├── cos.svg │ │ │ │ ├── filters.svg │ │ │ │ └── teams.svg │ │ │ ├── pass.svg │ │ │ ├── right.svg │ │ │ ├── star.svg │ │ │ ├── star_white.svg │ │ │ ├── twitter.svg │ │ │ ├── videoPlayer │ │ │ │ ├── fullscreen.svg │ │ │ │ ├── mute.svg │ │ │ │ ├── normal-screen.svg │ │ │ │ ├── pause.svg │ │ │ │ ├── play.svg │ │ │ │ ├── small-mode.svg │ │ │ │ ├── small-screen.svg │ │ │ │ └── un-mute.svg │ │ │ ├── watched.svg │ │ │ └── x-icon.svg │ │ ├── index.html │ │ ├── manifest.json │ │ ├── reset.css │ │ ├── robots.txt │ │ └── video.mp4 │ ├── src │ │ ├── App.test.tsx │ │ ├── App.tsx │ │ ├── config │ │ │ ├── axios │ │ │ │ ├── axiosInit.ts │ │ │ │ └── models │ │ │ │ │ └── index.ts │ │ │ ├── firebase │ │ │ │ └── firebaseInit.ts │ │ │ ├── redux │ │ │ │ ├── popups │ │ │ │ │ ├── popUpsActions.ts │ │ │ │ │ └── popupsReducer.tsx │ │ │ │ ├── rootReducer.tsx │ │ │ │ ├── store.tsx │ │ │ │ ├── videoPlayer │ │ │ │ │ ├── actions.tsx │ │ │ │ │ ├── reducer.tsx │ │ │ │ │ └── types.tsx │ │ │ │ └── videoTabs │ │ │ │ │ ├── actions.ts │ │ │ │ │ └── videoTabsReducer.tsx │ │ │ └── routing │ │ │ │ ├── NavigationPath.tsx │ │ │ │ └── Routing.tsx │ │ ├── features │ │ │ ├── allertsPanel │ │ │ │ └── components │ │ │ │ │ ├── AllertCell.tsx │ │ │ │ │ ├── AllertsPanel.tsx │ │ │ │ │ ├── AllertsSection.tsx │ │ │ │ │ └── Description.tsx │ │ │ ├── auth │ │ │ │ ├── action │ │ │ │ │ ├── signInGoogle.ts │ │ │ │ │ ├── signInSubmit.tsx │ │ │ │ │ ├── signUpSubmit.tsx │ │ │ │ │ └── validationSchema.tsx │ │ │ │ ├── components │ │ │ │ │ ├── ProtectedRoute.tsx │ │ │ │ │ ├── SignInComponents │ │ │ │ │ │ ├── RecoveryPass.tsx │ │ │ │ │ │ ├── SignInInputs.tsx │ │ │ │ │ │ ├── SignUpRedirect.tsx │ │ │ │ │ │ └── SocialMedia.tsx │ │ │ │ │ ├── SignUpComponents │ │ │ │ │ │ ├── SignInRedirect.tsx │ │ │ │ │ │ └── SignUpInputs.tsx │ │ │ │ │ └── loginComponents │ │ │ │ │ │ └── SubmitButton.tsx │ │ │ │ ├── enums.tsx │ │ │ │ └── page │ │ │ │ │ ├── SignInView.tsx │ │ │ │ │ └── SignUpView.tsx │ │ │ ├── common │ │ │ │ ├── components │ │ │ │ │ ├── form │ │ │ │ │ │ ├── ErrorMsg.tsx │ │ │ │ │ │ ├── Input.tsx │ │ │ │ │ │ ├── SubmitButton.tsx │ │ │ │ │ │ └── TitleForm.tsx │ │ │ │ │ └── layout │ │ │ │ │ │ ├── Aside.tsx │ │ │ │ │ │ ├── ClosePopUp.tsx │ │ │ │ │ │ ├── PopUps.tsx │ │ │ │ │ │ ├── ScrollBar.tsx │ │ │ │ │ │ ├── banner │ │ │ │ │ │ ├── Banner.tsx │ │ │ │ │ │ └── VideoSearch.tsx │ │ │ │ │ │ ├── header │ │ │ │ │ │ ├── BurgerNavigation.tsx │ │ │ │ │ │ ├── Header.tsx │ │ │ │ │ │ └── MovieNavBar.tsx │ │ │ │ │ │ ├── navBar │ │ │ │ │ │ ├── Btn.tsx │ │ │ │ │ │ ├── BtnsSection.tsx │ │ │ │ │ │ ├── NavBar.tsx │ │ │ │ │ │ ├── UserImg.tsx │ │ │ │ │ │ └── UserName.tsx │ │ │ │ │ │ ├── userPanel │ │ │ │ │ │ ├── ActionsSection.tsx │ │ │ │ │ │ ├── GoToBtn.tsx │ │ │ │ │ │ ├── UserData.tsx │ │ │ │ │ │ ├── UserPanel.tsx │ │ │ │ │ │ └── UserSection.tsx │ │ │ │ │ │ └── videoTabs │ │ │ │ │ │ ├── TabsItem.tsx │ │ │ │ │ │ ├── Title.tsx │ │ │ │ │ │ └── VideoTabs.tsx │ │ │ │ ├── hooks │ │ │ │ │ ├── usePopUp.ts │ │ │ │ │ └── useVisibleHeader.ts │ │ │ │ └── styles │ │ │ │ │ └── constans │ │ │ │ │ ├── Colors.ts │ │ │ │ │ ├── Device.ts │ │ │ │ │ ├── FontFamily.ts │ │ │ │ │ ├── FontSize.tsx │ │ │ │ │ ├── Sizes.ts │ │ │ │ │ └── fontWeight.tsx │ │ │ ├── filters │ │ │ │ ├── components │ │ │ │ │ ├── CategorieCheckbox.tsx │ │ │ │ │ ├── Categories.tsx │ │ │ │ │ ├── Filters.tsx │ │ │ │ │ └── WatchedCheckbox.tsx │ │ │ │ ├── hooks │ │ │ │ │ ├── useCategories.tsx │ │ │ │ │ ├── useFiltersForm.tsx │ │ │ │ │ ├── useFormDelay.tsx │ │ │ │ │ └── useFormikData.tsx │ │ │ │ └── reducer │ │ │ │ │ ├── filtersActions.ts │ │ │ │ │ ├── filtersReducer.ts │ │ │ │ │ └── types.ts │ │ │ ├── videoPlayer │ │ │ │ ├── SmallModeInterface.tsx │ │ │ │ ├── TimeBar.tsx │ │ │ │ ├── Timer.tsx │ │ │ │ ├── VideoPlayer.tsx │ │ │ │ ├── VideoPlayerComponent.tsx │ │ │ │ ├── VideoPlayerControls.tsx │ │ │ │ ├── actions │ │ │ │ │ ├── EventController.tsx │ │ │ │ │ ├── ReduxActions.tsx │ │ │ │ │ ├── checkButtonType .tsx │ │ │ │ │ ├── handleVideoContainerRef.ts │ │ │ │ │ ├── handleVideoRef.ts │ │ │ │ │ ├── videoActionController.tsx │ │ │ │ │ └── videoPlayerActions.tsx │ │ │ │ ├── enums.tsx │ │ │ │ ├── interface.tsx │ │ │ │ ├── refs.store.tsx │ │ │ │ └── videoPlayerButtons │ │ │ │ │ ├── FullscreenBtn.tsx │ │ │ │ │ ├── MinimizeBtn.tsx │ │ │ │ │ ├── MuteBtn.tsx │ │ │ │ │ ├── NewVideoPlayerBtn.tsx │ │ │ │ │ └── PlayBtn.tsx │ │ │ └── videos │ │ │ │ ├── action │ │ │ │ ├── SliderCalcService.ts │ │ │ │ ├── getMoviesList.tsx │ │ │ │ └── movieArray.tsx │ │ │ │ ├── components │ │ │ │ ├── movieList │ │ │ │ │ ├── Movie.tsx │ │ │ │ │ ├── Slider.tsx │ │ │ │ │ ├── SliderBtns.tsx │ │ │ │ │ ├── SliderContainer.tsx │ │ │ │ │ └── videoItem │ │ │ │ │ │ ├── LikeButton.tsx │ │ │ │ │ │ ├── Options.tsx │ │ │ │ │ │ ├── VideoInfo.tsx │ │ │ │ │ │ ├── VideoInteractions.tsx │ │ │ │ │ │ └── VideoItem.tsx │ │ │ │ └── singleVideoComponents │ │ │ │ │ ├── Description.tsx │ │ │ │ │ ├── Quiz.tsx │ │ │ │ │ ├── TechCell.tsx │ │ │ │ │ ├── TitleAndAuthor.tsx │ │ │ │ │ ├── VideoDescription.tsx │ │ │ │ │ └── VideoPlayerComponent.tsx │ │ │ │ ├── hooks │ │ │ │ └── useFillerItems.ts │ │ │ │ ├── page │ │ │ │ ├── MovieListView.tsx │ │ │ │ ├── Movies.tsx │ │ │ │ └── SingleMovieView.tsx │ │ │ │ └── providers │ │ │ │ └── Slide.tsx │ │ ├── index.tsx │ │ ├── react-app-env.d.ts │ │ ├── serviceWorker.ts │ │ └── setupTests.ts │ ├── tsconfig.json │ └── yarn.lock └── mobile │ ├── . gitattributes │ ├── .buckconfig │ ├── .eslintrc.js │ ├── .gitattributes │ ├── .gitignore │ ├── .prettierrc.js │ ├── .watchmanconfig │ ├── App.tsx │ ├── README.md │ ├── __tests__ │ └── App-test.tsx │ ├── android │ ├── app │ │ ├── _BUCK │ │ ├── build.gradle │ │ ├── build_defs.bzl │ │ ├── debug.keystore │ │ ├── google-services.json │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── Montserrat-Bold.ttf │ │ │ │ ├── Montserrat-Regular.ttf │ │ │ │ └── Montserrat-SemiBold.ttf │ │ │ ├── java │ │ │ └── com │ │ │ │ └── mobile │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MainApplication.java │ │ │ │ └── SplashActivity.java │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── arrow.png │ │ │ ├── back_arrow.png │ │ │ ├── background_splash.xml │ │ │ ├── byk.png │ │ │ ├── bykcct.png │ │ │ ├── email.png │ │ │ ├── eye.png │ │ │ ├── facebook.png │ │ │ ├── google.png │ │ │ ├── h.png │ │ │ ├── heart.JPG │ │ │ ├── ic_alert.png │ │ │ ├── ic_arrow_down.png │ │ │ ├── ic_arrowright.png │ │ │ ├── ic_burger.png │ │ │ ├── ic_drawer.png │ │ │ ├── ic_heart.png │ │ │ ├── ic_logout.png │ │ │ ├── ic_magnifier.png │ │ │ ├── ic_menu.png │ │ │ ├── ic_play.png │ │ │ ├── ic_player.png │ │ │ ├── ic_playlist.png │ │ │ ├── ic_profile.png │ │ │ ├── ic_qr.png │ │ │ ├── ic_search.png │ │ │ ├── ic_tasks.png │ │ │ ├── ic_team.png │ │ │ ├── ic_user.png │ │ │ ├── icon.png │ │ │ ├── icon2x.png │ │ │ ├── icon3x.png │ │ │ ├── info.png │ │ │ ├── mainheader.png │ │ │ ├── movie1.jpg │ │ │ ├── movie2.png │ │ │ ├── movie3.jpg │ │ │ ├── movie4.jpg │ │ │ ├── movie5.jpg │ │ │ ├── password.png │ │ │ ├── play.png │ │ │ ├── play_brown.png │ │ │ ├── plus.png │ │ │ ├── square.png │ │ │ ├── twitter.png │ │ │ ├── user.png │ │ │ ├── x.png │ │ │ └── xsmall.png │ │ │ ├── mipmap-hdpi │ │ │ ├── byk.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── byk.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── icon2x.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── byk.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── icon3x.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── byk.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── icon3x.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── byk.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── icon3x.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle │ ├── app.json │ ├── assets │ ├── fonts │ │ ├── Montserrat-Bold.ttf │ │ ├── Montserrat-Regular.ttf │ │ └── Montserrat-SemiBold.ttf │ └── img │ │ ├── 5.png │ │ ├── back_arrow.png │ │ ├── back_arrow2.png │ │ ├── h.png │ │ ├── heart.JPG │ │ ├── j1.png │ │ ├── j2.png │ │ ├── j3.png │ │ ├── j4.png │ │ ├── play — kopia.png │ │ ├── play.png │ │ ├── play_brown.png │ │ ├── player.jpg │ │ └── player.png │ ├── babel.config.js │ ├── envs_clone │ ├── development.json │ ├── production.json │ └── staging.json │ ├── index.js │ ├── ios │ ├── GoogleService-Info.plist │ ├── Podfile │ ├── Podfile.lock │ ├── mobile-Bridging-Header.h │ ├── mobile-tvOS │ │ └── Info.plist │ ├── mobile-tvOSTests │ │ └── Info.plist │ ├── mobile.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── mobile-tvOS.xcscheme │ │ │ └── mobile.xcscheme │ ├── mobile.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── mobile │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ └── LaunchScreen.xib │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Image.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_magnifier.png │ │ │ ├── arrow.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow.png │ │ │ ├── back_arrow.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── back_arrow.png │ │ │ ├── byk.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── byk.png │ │ │ ├── email.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── email.png │ │ │ ├── eye.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── eye.png │ │ │ ├── facebook.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── facebook.png │ │ │ ├── google.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── google.png │ │ │ ├── h.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── h.png │ │ │ ├── ic_alert.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_alert.png │ │ │ ├── ic_arrow_down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_arrow_down_small.png │ │ │ ├── ic_arrowright.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_arrowright.png │ │ │ ├── ic_burger.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_burger.png │ │ │ ├── ic_drawer.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── drawer_ic.png │ │ │ ├── ic_heart.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_heart.png │ │ │ ├── ic_logout.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_logout.png │ │ │ ├── ic_magnifier.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_magnifier.png │ │ │ ├── ic_menu.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_menu.png │ │ │ ├── ic_play.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_play.png │ │ │ ├── ic_player.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── player.png │ │ │ ├── ic_playlist.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_playlist.png │ │ │ ├── ic_profile.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_profile.png │ │ │ ├── ic_qr.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_qr.png │ │ │ ├── ic_search.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_search.png │ │ │ ├── ic_tasks.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_tasks.png │ │ │ ├── ic_team.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_team.png │ │ │ ├── ic_user.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_user.png │ │ │ ├── info.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── info.png │ │ │ ├── mainheader.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mainheader.png │ │ │ ├── movie1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── movie1.jpg │ │ │ ├── movie2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── movie2.png │ │ │ ├── movie3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── movie3.jpg │ │ │ ├── movie4.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── movies4.jpg │ │ │ ├── movie5.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── movie5.jpg │ │ │ ├── password.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── password.png │ │ │ ├── play.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── play.png │ │ │ ├── plus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── plus.png │ │ │ ├── twitter.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── twitter.png │ │ │ ├── user.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── user.png │ │ │ └── x.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── x.png │ │ ├── Info.plist │ │ ├── main.m │ │ └── mobile.entitlements │ └── mobileTests │ │ ├── Info.plist │ │ └── mobileTests.m │ ├── metro.config.js │ ├── package.json │ ├── react-native.config.js │ ├── scripts │ └── set-environment.js │ ├── src │ ├── config │ │ ├── axios │ │ │ └── axiosInit.tsx │ │ └── routing │ │ │ ├── AuthorizationNavigation.tsx │ │ │ ├── BottomNavigation │ │ │ ├── AlertIcon.tsx │ │ │ ├── FooterButton.tsx │ │ │ ├── OwnBottomNav.tsx │ │ │ └── TabNavigation.tsx │ │ │ ├── DrawerNav │ │ │ ├── ButtonDrawer.tsx │ │ │ ├── DrawerContentScreen.tsx │ │ │ ├── DrawerStyle.tsx │ │ │ └── ProfileBox.tsx │ │ │ ├── DrawerNavigation.tsx │ │ │ ├── NavigationName.ts │ │ │ └── ParamList.ts │ ├── features │ │ ├── auth │ │ │ ├── action │ │ │ │ ├── LoginSubmit.tsx │ │ │ │ ├── PostUser.tsx │ │ │ │ ├── handleFormSubmit.tsx │ │ │ │ ├── handleRegistrationAlert.tsx │ │ │ │ ├── singInSubmit.tsx │ │ │ │ ├── validationSchema.tsx │ │ │ │ └── validationSchemaRegistration.tsx │ │ │ ├── components │ │ │ │ ├── Footer.tsx │ │ │ │ ├── SignIn │ │ │ │ │ ├── AnotherSingInMethods.tsx │ │ │ │ │ ├── ErrorEnum.ts │ │ │ │ │ ├── LogIn.tsx │ │ │ │ │ ├── SignInBtn.tsx │ │ │ │ │ ├── SignInHeader.tsx │ │ │ │ │ └── SignInInput.tsx │ │ │ │ ├── SignUpBtn.tsx │ │ │ │ └── SingUp │ │ │ │ │ ├── InputSection.tsx │ │ │ │ │ └── SignUpBtn.tsx │ │ │ └── page │ │ │ │ ├── SignInScrren.tsx │ │ │ │ └── SingUpScrenn.tsx │ │ ├── common │ │ │ ├── actions │ │ │ │ ├── PostUser.tsx │ │ │ │ ├── handleFormSubmit.tsx │ │ │ │ ├── handleRegistrationAlert.tsx │ │ │ │ └── validationSchema.tsx │ │ │ ├── components │ │ │ │ ├── Button.tsx │ │ │ │ ├── Error.tsx │ │ │ │ ├── FormikInput.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── Loading.tsx │ │ │ │ ├── NavOption.tsx │ │ │ │ └── TabBottomNavStyle.tsx │ │ │ ├── models │ │ │ │ └── Global.tsx │ │ │ ├── styles │ │ │ │ ├── MyText.ts │ │ │ │ └── constans │ │ │ │ │ ├── Color.ts │ │ │ │ │ ├── DifrentEnum.ts │ │ │ │ │ ├── FontFamily.ts │ │ │ │ │ ├── FontSize.ts │ │ │ │ │ ├── FontWeight.ts │ │ │ │ │ └── ShadowStyle.tsx │ │ │ └── types │ │ │ │ ├── InputTypes.tsx │ │ │ │ └── types.tsx │ │ ├── notifications │ │ │ ├── NotificationAction.tsx │ │ │ ├── NotificationEnum.tsx │ │ │ ├── NotificationHooks.tsx │ │ │ ├── NotificationStoreProvider.tsx │ │ │ ├── NotificationType.ts │ │ │ ├── NotificationsStore.tsx │ │ │ └── context │ │ │ │ ├── ContextType.ts │ │ │ │ └── NotificationReducer.tsx │ │ ├── videoPlayer │ │ │ ├── commponents │ │ │ │ └── YouTubePlayer.tsx │ │ │ ├── models │ │ │ │ ├── IPlayer.ts │ │ │ │ └── PlayerType.ts │ │ │ └── page │ │ │ │ └── VideoPlayerScreen.tsx │ │ └── videos │ │ │ ├── action │ │ │ ├── ExampleData.ts │ │ │ ├── InputTypes.tsx │ │ │ └── conector.ts │ │ │ ├── components │ │ │ ├── FiltersScreen │ │ │ │ ├── BlackFilterButton.tsx │ │ │ │ ├── BlackFilterButtonInShortcut.tsx │ │ │ │ ├── ShortcutToFilters.tsx │ │ │ │ ├── WhiteFilterButton.tsx │ │ │ │ └── XButton.tsx │ │ │ ├── MainScreen │ │ │ │ ├── BigHeaderButton.tsx │ │ │ │ ├── MainScreenHeader.tsx │ │ │ │ ├── SmallHeaderButton.tsx │ │ │ │ ├── SmallSquareOfMovie.tsx │ │ │ │ └── SquareToRenderTemp.tsx │ │ │ ├── Movies │ │ │ │ ├── AnimationSlaider.tsx │ │ │ │ ├── BigSquareOfMovie.tsx │ │ │ │ ├── CaseNotificationForMovies.tsx │ │ │ │ ├── HeaderLeft.tsx │ │ │ │ ├── HeaderRight.tsx │ │ │ │ ├── HeaderTitle.tsx │ │ │ │ ├── ImageForNormalSlaider.tsx │ │ │ │ ├── ImageUtils.ts │ │ │ │ ├── MovieListStyle.tsx │ │ │ │ ├── ScreenHederMovies.tsx │ │ │ │ ├── SlaiderLarge.tsx │ │ │ │ └── SlaiderNormal.tsx │ │ │ ├── QrScaner │ │ │ │ ├── QrHooks.tsx │ │ │ │ ├── QrScaner.tsx │ │ │ │ └── QrService.tsx │ │ │ └── SingleScreen │ │ │ │ ├── HeaderLeftSingle.tsx │ │ │ │ ├── MainDescription.tsx │ │ │ │ ├── MoviesType.tsx │ │ │ │ └── SingleMovieStyle2.tsx │ │ │ └── page │ │ │ ├── Alert.tsx │ │ │ ├── FilterWithList.tsx │ │ │ ├── FiltersScreen.tsx │ │ │ ├── HomeScreen.tsx │ │ │ ├── MoviesList.tsx │ │ │ ├── SingleMovie.tsx │ │ │ ├── Tasks.tsx │ │ │ ├── TeamsScreen.tsx │ │ │ └── Temp.tsx │ └── variables │ │ ├── FontSize.ts │ │ ├── RemoveTokenHooks.tsx │ │ ├── TokenHooks.tsx │ │ ├── VideoHook.tsx │ │ └── VideosHooks.tsx │ ├── tsconfig.json │ └── yarn.lock ├── readmeasset ├── adam.png ├── app_store.png ├── beata.png ├── black_google_play.png ├── check.png ├── google_play.png ├── justyna.png ├── michal.png └── mikolaj.png ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | lib/**/* 3 | .expo/* 4 | npm-debug.* 5 | *.jks 6 | *.p8 7 | *.p12 8 | *.key 9 | *.mobileprovision 10 | *.orig.* 11 | web-build/ 12 | web-report/ 13 | 14 | # macOS 15 | .DS_Store 16 | lerna-debug.log 17 | 18 | .idea 19 | .vscode 20 | -------------------------------------------------------------------------------- /doc/INSTALLATION.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | ## Install dependencies 4 | ```bash 5 | nvm install 10.16.3 6 | nvm use 10.16.3 7 | 8 | npm i -g yarn 9 | npm i -g gulp 10 | npm i -g solidarity solidarity-react-native 11 | npm i -g @nestjs/cli 12 | npm i -g typescript 13 | npm i -g lerna 14 | npm i -g ts-node 15 | npm i -g nodemon 16 | 17 | lerna bootstrap 18 | ``` 19 | 20 | Additionally install: Java8, Android SDK, Xcode and PostgreSQL 21 | 22 | ## Configuration Backend 23 | 24 | ```bash 25 | cp packages/backend/.env.clone .env 26 | ``` 27 | complete the values ​​in .env 28 | 29 | 30 | ```bash 31 | lerna run db:fill 32 | ``` 33 | 34 | ## Run Backend & Frontend 35 | 36 | ```bash 37 | lerna run start 38 | ``` 39 | 40 | ## Run Mobile 41 | 42 | ```bash 43 | lerna run env:prod 44 | 45 | cd packages/mobile 46 | 47 | #Android 48 | npx react-native run-android 49 | 50 | #IOS 51 | npx react-native run-ios 52 | ``` -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | coverageDirectory: 'coverage', 4 | coverageReporters: ['text', 'clover'], 5 | coverageThreshold: { 6 | global: { 7 | branches: 80, 8 | functions: 80, 9 | lines: 80, 10 | statements: 80, 11 | }, 12 | }, 13 | globals: { 14 | 'ts-jest': { 15 | extends: './babel.config.js', 16 | }, 17 | }, 18 | moduleFileExtensions: ['ts', 'tsx', 'js'], 19 | modulePathIgnorePatterns: ['dist'], 20 | moduleNameMapper: { 21 | '@taxi/(.+)$': 'packages/$1/src', 22 | }, 23 | notify: true, 24 | notifyMode: 'always', 25 | roots: ['packages'], 26 | testMatch: ['**/__tests__/*.+(ts|tsx|js)', '**/*.test.+(ts|tsx|js)'], 27 | transform: { 28 | '^.+\\.(ts|tsx)$': 'ts-jest', 29 | }, 30 | setupFilesAfterEnv: ['jest/setupTests.ts'], 31 | }; 32 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/*" 4 | ], 5 | "version": "0.0.1", 6 | "npmClient": "yarn", 7 | "useWorkspaces": false 8 | } 9 | -------------------------------------------------------------------------------- /packages/backend/.env.clone: -------------------------------------------------------------------------------- 1 | APP_PORT=3300 2 | APP_MODE=DEV 3 | RUN_MIGRATIONS=true 4 | DB_HOST='localhost' 5 | DB_PORT='5432' 6 | DB_USERNAME='postgres' 7 | DB_PASSWORD='postgres' 8 | DB_NAME='postgres' 9 | SECRET_KEY='key' 10 | EXPIRESIN_JWT='12h' 11 | DEFAULT_VIDEOS_FOLDER='uploads/video/' 12 | DEFAULT_PHOTOS_FOLDER='uploads/photo/' 13 | EXPIRES_RESET='30m' 14 | FIREBASE_PROJECT_ID='' 15 | FIREBASE_PRIVATE_KEY='' 16 | FIREBASE_PRIVATE_KEY_ID='' 17 | FIREBASE_CLIENT_EMAIL='' 18 | FIREBASE_CLIENT_ID='' 19 | CLIENT_X509_CERT_URL='' 20 | FIREBASE_DATABASE_URL='' 21 | /hms 22 | HMS_APP_SECRET='' 23 | HMS_APP_ID='' 24 | HMS_HOST = '' 25 | HMS_POST = '' 26 | /mail 27 | MAIL_HOST = '' 28 | MAIL_PORT = '' 29 | MAIL_SECURE = '' 30 | MAIL_LOGIN = '' 31 | MAIL_PASSWORD ='' 32 | MAIL_SENDER = '' -------------------------------------------------------------------------------- /packages/backend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": false, 3 | "tabWidth": 2, 4 | "singleQuote": true, 5 | "trailingComma": "all", 6 | "semi": true, 7 | "jsxBracketSameLine": true, 8 | "bracketSpacing": true, 9 | "arrowParens": "avoid" 10 | } -------------------------------------------------------------------------------- /packages/backend/README.md: -------------------------------------------------------------------------------- 1 | ## run psql 2 | 3 | psql -h localhost -d postgres -U postgres 4 | 5 | -------------------------------------------------------------------------------- /packages/backend/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "collection": "@nestjs/schematics", 3 | "sourceRoot": "src" 4 | } 5 | -------------------------------------------------------------------------------- /packages/backend/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["src"], 3 | "ext": "ts", 4 | "ignore": ["src/**/*.spec.ts"], 5 | "exec": "node --inspect=127.0.0.1:9223 -r ts-node/register -- src/main.ts", 6 | "env": {} 7 | } -------------------------------------------------------------------------------- /packages/backend/src/app.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { AppController } from './app.controller'; 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppController', () => { 6 | let appController: AppController; 7 | 8 | beforeEach(async () => { 9 | const app: TestingModule = await Test.createTestingModule({ 10 | controllers: [AppController], 11 | providers: [AppService], 12 | }).compile(); 13 | 14 | appController = app.get(AppController); 15 | }); 16 | 17 | describe('root', () => { 18 | it('should return "Hello World!"', () => { 19 | expect(appController.getHello()).toBe('Hello World!'); 20 | }); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /packages/backend/src/app.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get,Param,Query, UseGuards} from '@nestjs/common'; 2 | import { AppService } from './app.service'; 3 | import { AuthGuard } from '@nestjs/passport'; 4 | 5 | @Controller() 6 | export class AppController { 7 | constructor(private readonly appService: AppService) {} 8 | 9 | @Get("test23") 10 | getHello(): string { 11 | return this.appService.getHello(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/backend/src/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class AppService { 5 | getHello(): string { 6 | return 'Hello World!'; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/backend/src/auth/changePassword.dto.ts: -------------------------------------------------------------------------------- 1 | import {ApiProperty} from "@nestjs/swagger"; 2 | import {IChangePasswordRequest} from "@project/common/features/auth/models"; 3 | import {MinLength} from "class-validator"; 4 | import {PASSWORD_LENGTH} from "@project/common/features/Const" 5 | export class ChangePasswordDTO implements IChangePasswordRequest { 6 | 7 | @ApiProperty() 8 | token: string; 9 | 10 | @ApiProperty() 11 | @MinLength(PASSWORD_LENGTH) 12 | password: string; 13 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/jwt.authGuard.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ExecutionContext, 3 | Injectable, 4 | UnauthorizedException, 5 | } from '@nestjs/common'; 6 | import { AuthGuard } from '@nestjs/passport'; 7 | 8 | @Injectable() 9 | export class JwtAuthGuard extends AuthGuard('jwt') { 10 | canActivate(context: ExecutionContext) { 11 | // Add your custom authentication logic here 12 | // for example, call super.logIn(request) to establish a session. 13 | return super.canActivate(context); 14 | } 15 | 16 | handleRequest(err, user, info) { 17 | // You can throw an exception based on either "info" or "err" arguments 18 | if (err || !user) { 19 | throw err || new UnauthorizedException(); 20 | } 21 | return user; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/backend/src/auth/mailing/views/layouts/main.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CodeTutorials 7 | 8 | 9 | {{{body}}} 10 | 11 | -------------------------------------------------------------------------------- /packages/backend/src/auth/mailing/views/resetPassword.hbs: -------------------------------------------------------------------------------- 1 |

Reset Hasła


2 | 3 | Cześć, niedawno otrzymaliśmy od Ciebie prośbę o zresetowanie hasła do tego konta CodeTutorials.
4 | Aby zaktualizować hasło, kliknij poniższy link.
5 | Reset hasła 6 |
-------------------------------------------------------------------------------- /packages/backend/src/auth/resetPassword.dto.ts: -------------------------------------------------------------------------------- 1 | import {ApiProperty} from "@nestjs/swagger"; 2 | import {IResetPasswordRequest} from "@project/common/features/auth/models"; 3 | 4 | export class ResetPasswordDTO implements IResetPasswordRequest { 5 | 6 | @ApiProperty() 7 | email: string; 8 | 9 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/singIn.dto.ts: -------------------------------------------------------------------------------- 1 | import {ISingInRequest} from '@project/common/features/auth/models' 2 | import {ApiProperty} from '@nestjs/swagger' 3 | import { IsOptional } from 'class-validator'; 4 | export class SingInDTO implements ISingInRequest { 5 | 6 | @ApiProperty() 7 | email: string; 8 | 9 | @ApiProperty() 10 | password: string; 11 | 12 | @ApiProperty() 13 | @IsOptional() 14 | firebaseToken: string; 15 | 16 | @ApiProperty() 17 | @IsOptional() 18 | hmsToken: string; 19 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/sql.error.code.ts: -------------------------------------------------------------------------------- 1 | export enum SqlErrorCode { 2 | DUPLICATE_EMAIL='23505' 3 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/token.ts: -------------------------------------------------------------------------------- 1 | import {IToken} from "@project/common/features/auth/models"; 2 | export class Token implements IToken { 3 | token: string; 4 | dateExpired: Date; 5 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/token/token.entity.ts: -------------------------------------------------------------------------------- 1 | import {Column, Entity, PrimaryGeneratedColumn} from "typeorm"; 2 | 3 | @Entity('tokens') 4 | class TokensEntity { 5 | @PrimaryGeneratedColumn() id: number; 6 | 7 | @Column('text') token: string; 8 | 9 | @Column("date") dateExpired: Date; 10 | 11 | } 12 | 13 | export default TokensEntity; -------------------------------------------------------------------------------- /packages/backend/src/auth/user.decorator.ts: -------------------------------------------------------------------------------- 1 | import { createParamDecorator } from '@nestjs/common'; 2 | 3 | export const AuthUser = createParamDecorator((data, req) => { 4 | return req.user; 5 | }); -------------------------------------------------------------------------------- /packages/backend/src/auth/users/enums/ErrorMessage.ts: -------------------------------------------------------------------------------- 1 | export enum ErrorMessage { 2 | UNAUTHORIZED = 'Invalid credentials', 3 | USER_NOT_FOUND = 'User not found', 4 | } 5 | -------------------------------------------------------------------------------- /packages/backend/src/auth/users/models/SignInPayload.ts: -------------------------------------------------------------------------------- 1 | export class SignInPayload { 2 | 3 | iat:string; 4 | 5 | constructor(public id:number, public email:string) {} 6 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/users/user.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsEmail, MinLength } from 'class-validator'; 2 | import {IUserRequest, IUserDataRespons} from '@project/common/features/auth/models' 3 | import {ApiProperty} from '@nestjs/swagger' 4 | 5 | export class UserDTO implements IUserRequest { 6 | 7 | @ApiProperty() 8 | @IsEmail() 9 | email: string; 10 | 11 | @ApiProperty() 12 | @MinLength(8) 13 | password: string; 14 | 15 | @ApiProperty() 16 | name: string 17 | 18 | } 19 | 20 | export class UserData implements IUserDataRespons { 21 | @ApiProperty() 22 | @IsEmail() 23 | email: string; 24 | 25 | @ApiProperty() 26 | name: string ; 27 | } -------------------------------------------------------------------------------- /packages/backend/src/auth/users/user.entity.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Entity, 3 | PrimaryGeneratedColumn, 4 | Column, 5 | CreateDateColumn, 6 | BaseEntity, 7 | Unique, 8 | OneToMany, 9 | } from 'typeorm'; 10 | import { DevicesEntity } from '../../notifications/devices.entity'; 11 | 12 | 13 | @Entity('Users') 14 | @Unique(['email']) 15 | export class UserEntity extends BaseEntity { 16 | @PrimaryGeneratedColumn() id: number; 17 | 18 | @CreateDateColumn({ type: 'timestamp', default: () => 'LOCALTIMESTAMP' }) 19 | created: string; 20 | 21 | @Column('varchar', { length: 255 }) email: string; 22 | 23 | @Column('varchar', { length: 255 }) name: string; 24 | 25 | @Column('varchar', { length: 255 }) password: string; 26 | 27 | @OneToMany( 28 | type => DevicesEntity, 29 | devices => devices.user, 30 | ) 31 | devices: DevicesEntity[]; 32 | 33 | @Column() salt: string; 34 | } 35 | -------------------------------------------------------------------------------- /packages/backend/src/auth/users/users.repositoryProvider.ts: -------------------------------------------------------------------------------- 1 | import { Connection } from "typeorm"; 2 | import { UsersRepository } from "./user.repository"; 3 | 4 | export const UsersRepositoryProvider = { 5 | provide: 'UsersRepository', 6 | useFactory: (connection: Connection) => connection.getCustomRepository(UsersRepository), 7 | inject: [Connection], 8 | }; -------------------------------------------------------------------------------- /packages/backend/src/auth/users/users.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { UsersService } from './users.service'; 3 | 4 | describe('UsersService', () => { 5 | let service: UsersService; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | providers: [UsersService], 10 | }).compile(); 11 | 12 | service = module.get(UsersService); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(service).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/config/scripts/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | set -x 4 | if [ "$RUN_MIGRATIONS" ]; then 5 | echo "RUNNING MIGRATIONS"; 6 | npm run typeorm:migration:run 7 | fi 8 | echo "START SERVER"; 9 | npm run start:prod -------------------------------------------------------------------------------- /packages/backend/src/config/scripts/write-type-orm-config.ts: -------------------------------------------------------------------------------- 1 | import { configService } from '../config.service'; 2 | import fs = require('fs'); 3 | fs.writeFileSync('ormconfig.json', 4 | JSON.stringify(configService.getTypeOrmConfig(), null, 2) 5 | ) -------------------------------------------------------------------------------- /packages/backend/src/connector/connector.module.ts: -------------------------------------------------------------------------------- 1 | import { Module, HttpModule } from '@nestjs/common'; 2 | import { ConnectorService } from './connector.service'; 3 | 4 | @Module({ 5 | imports: [HttpModule], 6 | providers: [ConnectorService], 7 | exports: [ConnectorService], 8 | }) 9 | export class ConnectorModule {} 10 | -------------------------------------------------------------------------------- /packages/backend/src/connector/connector.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { ConnectorService } from './connector.service'; 3 | 4 | describe('ConnectorService', () => { 5 | let service: ConnectorService; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | providers: [ConnectorService], 10 | }).compile(); 11 | 12 | service = module.get(ConnectorService); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(service).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/files/files.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { FilesController } from './files.controller'; 3 | 4 | describe('Files Controller', () => { 5 | let controller: FilesController; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | controllers: [FilesController], 10 | }).compile(); 11 | 12 | controller = module.get(FilesController); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(controller).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/files/files.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get, HttpException, HttpStatus, Param, Res } from '@nestjs/common'; 2 | import { ApiTags } from '@nestjs/swagger'; 3 | 4 | @ApiTags('files') 5 | @Controller('files') 6 | export class FilesController { 7 | 8 | @Get(':imgname') 9 | seeFile(@Param('imgname') imageName:string, @Res() res){ 10 | try{ 11 | res.sendFile(imageName,{root:'uploads/photo'}) 12 | }catch(error){ 13 | throw new HttpException({ 14 | status: HttpStatus.NOT_FOUND, 15 | error: 'Not found image', 16 | }, HttpStatus.NOT_FOUND); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/backend/src/files/files.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { FilesController } from './files.controller'; 3 | 4 | @Module({ 5 | controllers: [FilesController] 6 | }) 7 | export class FilesModule {} 8 | -------------------------------------------------------------------------------- /packages/backend/src/firebase-auth/dto/google-user.dto.ts: -------------------------------------------------------------------------------- 1 | 2 | export class GoogleUserDto { 3 | uid: string 4 | email: string 5 | photoUrl?: string 6 | } -------------------------------------------------------------------------------- /packages/backend/src/firebase-auth/exceptions.enum.ts: -------------------------------------------------------------------------------- 1 | export enum Exceptions { 2 | GOOGLE_ACC_DOSENT_EXISTS = "konto google nie istnieje" 3 | } -------------------------------------------------------------------------------- /packages/backend/src/firebase-auth/firebase-auth.controller.ts: -------------------------------------------------------------------------------- 1 | import { FirebaseAuthService } from './firebase-auth.service'; 2 | import { GoogleUserDto } from './dto/google-user.dto'; 3 | import { Controller, Post, Body } from '@nestjs/common'; 4 | 5 | @Controller('firebase-auth') 6 | export class FirebaseAuthController { 7 | constructor(private firebaseAuthService: FirebaseAuthService){} 8 | @Post('/google') 9 | async verifyUserId(@Body('idToken') idToken: string): Promise<{token: string}>{ 10 | return await this.firebaseAuthService.login(idToken) 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /packages/backend/src/firebase-auth/firebase-auth.module.ts: -------------------------------------------------------------------------------- 1 | import { AuthModule } from './../auth/auth.module'; 2 | import { Module } from '@nestjs/common'; 3 | import { FirebaseAuthController } from './firebase-auth.controller'; 4 | import { FirebaseAuthService } from './firebase-auth.service'; 5 | 6 | @Module({ 7 | imports: [AuthModule], 8 | controllers: [FirebaseAuthController], 9 | providers: [FirebaseAuthService] 10 | }) 11 | export class FirebaseAuthModule {} 12 | -------------------------------------------------------------------------------- /packages/backend/src/migration/1581198194170-t123.ts: -------------------------------------------------------------------------------- 1 | import {MigrationInterface, QueryRunner} from "typeorm"; 2 | 3 | export class t1231581198194170 implements MigrationInterface { 4 | name = 't1231581198194170' 5 | 6 | public async up(queryRunner: QueryRunner): Promise { 7 | await queryRunner.query(`CREATE TABLE "videos" ("id" SERIAL NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT now(), "title" text NOT NULL, "description" text NOT NULL, "dateCreation" text NOT NULL, "country" text NOT NULL, "language" text NOT NULL, "duration" integer NOT NULL, "urlTrailer" text NOT NULL, "urlVideo" text NOT NULL, "urlPhoto" text NOT NULL, CONSTRAINT "PK_e4c86c0cf95aff16e9fb8220f6b" PRIMARY KEY ("id"))`, undefined); 8 | } 9 | 10 | public async down(queryRunner: QueryRunner): Promise { 11 | await queryRunner.query(`DROP TABLE "videos"`, undefined); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/backend/src/migration/1582983837547-users_table.ts: -------------------------------------------------------------------------------- 1 | import {MigrationInterface, QueryRunner} from "typeorm"; 2 | 3 | export class usersTable1582983837547 implements MigrationInterface { 4 | name = 'usersTable1582983837547' 5 | 6 | public async up(queryRunner: QueryRunner): Promise { 7 | await queryRunner.query(`CREATE TABLE "Users" ("id" SERIAL NOT NULL, "created" TIMESTAMP NOT NULL DEFAULT LOCALTIMESTAMP, "email" character varying(255) NOT NULL, "password" character varying(255) NOT NULL, "salt" character varying NOT NULL, CONSTRAINT "UQ_3c3ab3f49a87e6ddb607f3c4945" UNIQUE ("email"), CONSTRAINT "PK_16d4f7d636df336db11d87413e3" PRIMARY KEY ("id"))`, undefined); 8 | } 9 | 10 | public async down(queryRunner: QueryRunner): Promise { 11 | await queryRunner.query(`DROP TABLE "Users"`, undefined); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/backend/src/migration/1600707228300-tokens.ts: -------------------------------------------------------------------------------- 1 | import {MigrationInterface, QueryRunner} from "typeorm"; 2 | 3 | export class tokens1600707228300 implements MigrationInterface { 4 | name = 'tokens1600707228300' 5 | 6 | public async up(queryRunner: QueryRunner): Promise { 7 | await queryRunner.query(`CREATE TABLE "tokens" ("id" SERIAL NOT NULL, "token" text NOT NULL, "dateExpired" date NOT NULL, CONSTRAINT "PK_3001e89ada36263dabf1fb6210a" PRIMARY KEY ("id"))`); 8 | } 9 | 10 | public async down(queryRunner: QueryRunner): Promise { 11 | await queryRunner.query(`DROP TABLE "tokens"`); 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /packages/backend/src/migration/1601563388887-YoutubeId.ts: -------------------------------------------------------------------------------- 1 | import {MigrationInterface, QueryRunner} from "typeorm"; 2 | 3 | export class YoutubeId1601563388887 implements MigrationInterface { 4 | name = 'YoutubeId1601563388887' 5 | 6 | public async up(queryRunner: QueryRunner): Promise { 7 | await queryRunner.query(`ALTER TABLE "videos" ADD "idYoutube" text`, undefined); 8 | } 9 | 10 | public async down(queryRunner: QueryRunner): Promise { 11 | await queryRunner.query(`ALTER TABLE "videos" DROP COLUMN "idYoutube"`, undefined); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/backend/src/migration/1604340336209-addNameToUser.ts: -------------------------------------------------------------------------------- 1 | import {MigrationInterface, QueryRunner} from "typeorm"; 2 | 3 | export class addNameToUser1604340336209 implements MigrationInterface { 4 | name = 'addNameToUser1604340336209' 5 | 6 | public async up(queryRunner: QueryRunner): Promise { 7 | await queryRunner.query(`ALTER TABLE "Users" ADD "name" character varying(255) `, undefined); 8 | } 9 | 10 | public async down(queryRunner: QueryRunner): Promise { 11 | await queryRunner.query(`ALTER TABLE "Users" DROP COLUMN "name"`, undefined); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/backend/src/notifications/devices.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm'; 2 | import {UserEntity} from "../auth/users/user.entity" 3 | 4 | @Entity('devices') 5 | export class DevicesEntity { 6 | @PrimaryGeneratedColumn() 7 | id: string 8 | 9 | @Column("simple-array") 10 | firebaseTokens: string[]; 11 | 12 | @Column("simple-array") 13 | HmsTokens: string[] 14 | 15 | @ManyToOne(type => UserEntity, user => user.devices) 16 | user: UserEntity 17 | } 18 | 19 | 20 | -------------------------------------------------------------------------------- /packages/backend/src/notifications/message.model.ts: -------------------------------------------------------------------------------- 1 | export enum MessageTypes { 2 | NEW_VIDEO = 'newVideo', 3 | NEW_PLAYLIST = 'newPlaylist', 4 | } 5 | 6 | export enum TokenTypes { 7 | HMS = 'HmsTokens', 8 | FIREBASE = 'firebaseTokens', 9 | } 10 | 11 | export type ITokenType = TokenTypes.FIREBASE | TokenTypes.HMS; 12 | 13 | export type IMessageType = MessageTypes.NEW_VIDEO | MessageTypes.NEW_PLAYLIST; 14 | 15 | export interface IMessage { 16 | title: string; 17 | body: string; 18 | } 19 | 20 | export interface IMessageData { 21 | messageType: IMessageType; 22 | data?: any; 23 | } 24 | 25 | export interface IHmsMessage { 26 | titleMessage: string; 27 | pushMessage: string; 28 | } 29 | -------------------------------------------------------------------------------- /packages/backend/src/notifications/notification.dto.ts: -------------------------------------------------------------------------------- 1 | import {ApiProperty} from '@nestjs/swagger' 2 | 3 | export class NotificationDto { 4 | 5 | @ApiProperty() 6 | message: { 7 | notification:{ 8 | title: string, 9 | body:string 10 | } 11 | }; 12 | @ApiProperty() 13 | registrationToken: string; 14 | } -------------------------------------------------------------------------------- /packages/backend/src/notifications/notifications.module.ts: -------------------------------------------------------------------------------- 1 | import { DevicesEntity } from './devices.entity'; 2 | import { Module, HttpModule } from '@nestjs/common'; 3 | import { TypeOrmModule } from '@nestjs/typeorm'; 4 | import { NotificationsService } from './notifications.service'; 5 | import { ConnectorModule } from '../connector/connector.module'; 6 | 7 | @Module({ 8 | imports: [ 9 | TypeOrmModule.forFeature([DevicesEntity]), 10 | HttpModule, 11 | ConnectorModule, 12 | ], 13 | controllers: [], 14 | providers: [NotificationsService], 15 | exports: [NotificationsService], 16 | }) 17 | export class NotificationsModule {} 18 | -------------------------------------------------------------------------------- /packages/backend/src/notifications/notifications.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { NotificationsService } from './notifications.service'; 3 | 4 | describe('NotificationsService', () => { 5 | let service: NotificationsService; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | providers: [NotificationsService], 10 | }).compile(); 11 | 12 | service = module.get(NotificationsService); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(service).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/video-stream/video-stream.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { VideoStreamController } from './video-stream.controller'; 3 | 4 | describe('VideoStream Controller', () => { 5 | let controller: VideoStreamController; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | controllers: [VideoStreamController], 10 | }).compile(); 11 | 12 | controller = module.get(VideoStreamController); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(controller).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/video-stream/video-stream.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get, Post, Body, Res, Req } from '@nestjs/common'; 2 | import { VideoStreamService } from './video-stream.service'; 3 | 4 | @Controller('videos') 5 | export class VideoStreamController { 6 | constructor(private videoStreamService: VideoStreamService) {} 7 | 8 | @Get('/video') 9 | postStream(@Res() res, @Req() req) { 10 | this.videoStreamService.getVideo(res, req); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/backend/src/video-stream/video-stream.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { VideoStreamController } from './video-stream.controller'; 3 | import { VideoStreamService } from './video-stream.service'; 4 | 5 | @Module({ 6 | controllers: [VideoStreamController], 7 | providers: [VideoStreamService], 8 | }) 9 | export class VideoStreamModule {} 10 | -------------------------------------------------------------------------------- /packages/backend/src/video-stream/video-stream.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { VideoStreamService } from './video-stream.service'; 3 | 4 | describe('VideoStreamService', () => { 5 | let service: VideoStreamService; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | providers: [VideoStreamService], 10 | }).compile(); 11 | 12 | service = module.get(VideoStreamService); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(service).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/videos/category.entity.ts: -------------------------------------------------------------------------------- 1 | import {Entity, PrimaryGeneratedColumn, Column,ManyToMany,JoinTable, JoinColumn} from "typeorm"; 2 | import VideosEntity from "./videos.entity"; 3 | 4 | @Entity('category') 5 | class CategoryEntity { 6 | 7 | @PrimaryGeneratedColumn() 8 | id: number; 9 | 10 | @Column() 11 | name: string; 12 | 13 | @ManyToMany(type => VideosEntity, videos => videos.category) 14 | videos: VideosEntity[]; 15 | } 16 | 17 | export default CategoryEntity -------------------------------------------------------------------------------- /packages/backend/src/videos/videos.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { VideosController } from './videos.controller'; 3 | 4 | describe('Videos Controller', () => { 5 | let controller: VideosController; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | controllers: [VideosController], 10 | }).compile(); 11 | 12 | controller = module.get(VideosController); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(controller).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/videos/videos.enum.ts: -------------------------------------------------------------------------------- 1 | export enum CategoryEnum { 2 | Recommended = "Polecane dla Ciebie", 3 | TopRatd = "Najwyzej oceniane", 4 | NewAdd = "Nowo dodane", 5 | } 6 | 7 | export enum TypeMoviesEnum { 8 | Java = "Java", 9 | Database = "Filmy o bazach dancyh", 10 | Live = "Live" 11 | } -------------------------------------------------------------------------------- /packages/backend/src/videos/videos.module.ts: -------------------------------------------------------------------------------- 1 | import { NotificationsModule } from './../notifications/notifications.module'; 2 | import { Module } from '@nestjs/common'; 3 | import { VideosController } from './videos.controller'; 4 | import { VideosService } from './videos.service'; 5 | import { TypeOrmModule } from '@nestjs/typeorm'; 6 | import VideosEntity from './videos.entity'; 7 | import CategoryEntity from './category.entity'; 8 | 9 | @Module({ 10 | imports: [TypeOrmModule.forFeature([VideosEntity, CategoryEntity]), NotificationsModule], 11 | controllers: [VideosController], 12 | providers: [VideosService] 13 | }) 14 | export class VideosModule {} 15 | -------------------------------------------------------------------------------- /packages/backend/src/videos/videos.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { VideosService } from './videos.service'; 3 | 4 | describe('VideosService', () => { 5 | let service: VideosService; 6 | 7 | beforeEach(async () => { 8 | const module: TestingModule = await Test.createTestingModule({ 9 | providers: [VideosService], 10 | }).compile(); 11 | 12 | service = module.get(VideosService); 13 | }); 14 | 15 | it('should be defined', () => { 16 | expect(service).toBeDefined(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/backend/src/videos/videos.validation.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Injectable, PipeTransform, BadRequestException } from '@nestjs/common'; 2 | 3 | @Injectable() 4 | export class FilterVideosDtoMaping implements PipeTransform { 5 | async transform(value:any) { 6 | if(!value.category){ 7 | return value 8 | } 9 | const arrayValue = value.category.split(','); 10 | for(let i = 0; i < arrayValue.length; i++){ 11 | if( !Number.isInteger(parseInt(arrayValue[i]))){ 12 | throw new BadRequestException('Validation failed'); 13 | } 14 | } 15 | if(!arrayValue) { 16 | throw new BadRequestException('Validation failed'); 17 | } 18 | const tempValue = value; 19 | tempValue.category = arrayValue; 20 | return tempValue ; 21 | } 22 | } -------------------------------------------------------------------------------- /packages/backend/test/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { INestApplication } from '@nestjs/common'; 3 | import * as request from 'supertest'; 4 | import { AppModule } from './../src/app.module'; 5 | 6 | describe('AppController (e2e)', () => { 7 | let app: INestApplication; 8 | 9 | beforeEach(async () => { 10 | const moduleFixture: TestingModule = await Test.createTestingModule({ 11 | imports: [AppModule], 12 | }).compile(); 13 | 14 | app = moduleFixture.createNestApplication(); 15 | await app.init(); 16 | }); 17 | 18 | it('/ (GET)', () => { 19 | return request(app.getHttpServer()) 20 | .get('/') 21 | .expect(200) 22 | .expect('Hello World!'); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /packages/backend/test/jest-e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["js", "json", "ts"], 3 | "rootDir": ".", 4 | "testEnvironment": "node", 5 | "testRegex": ".e2e-spec.ts$", 6 | "transform": { 7 | "^.+\\.(t|j)s$": "ts-jest" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/backend/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "removeComments": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "target": "es2017", 9 | "sourceMap": true, 10 | // "outDir": "./dist", 11 | "baseUrl": "./", 12 | "incremental": true, 13 | "outDir": "./lib" 14 | }, 15 | "exclude": ["node_modules", "dist"], 16 | "extends": "../../tsconfig.json", 17 | "include": [ 18 | "./src" 19 | ] 20 | 21 | } 22 | -------------------------------------------------------------------------------- /packages/backend/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "error", 3 | "extends": ["tslint:recommended"], 4 | "jsRules": { 5 | "no-unused-expression": true 6 | }, 7 | "rules": { 8 | "quotemark": [true, "single"], 9 | "member-access": [false], 10 | "ordered-imports": [false], 11 | "max-line-length": [true, 150], 12 | "member-ordering": [false], 13 | "interface-name": [false], 14 | "arrow-parens": false, 15 | "object-literal-sort-keys": false 16 | }, 17 | "rulesDirectory": [] 18 | } 19 | -------------------------------------------------------------------------------- /packages/backend/webpack.config.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | const nodeExternals = require('webpack-node-externals'); 3 | 4 | module.exports = function(options) { 5 | return { 6 | ...options, 7 | entry: ['webpack/hot/poll?100', './src/main.ts'], 8 | watch: true, 9 | externals: [ 10 | nodeExternals({ 11 | whitelist: ['webpack/hot/poll?100'], 12 | }), 13 | ], 14 | plugins: [...options.plugins, new webpack.HotModuleReplacementPlugin()], 15 | }; 16 | }; -------------------------------------------------------------------------------- /packages/common/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | .expo/* 3 | npm-debug.* 4 | *.jks 5 | *.p8 6 | *.p12 7 | *.key 8 | *.mobileprovision 9 | *.orig.* 10 | web-build/ 11 | web-report/ 12 | features 13 | # macOS 14 | .DS_Store 15 | 16 | package-lock.json 17 | features 18 | /features/ 19 | -------------------------------------------------------------------------------- /packages/common/README.md: -------------------------------------------------------------------------------- 1 | # `@yourproject/common` 2 | 3 | > TODO: description 4 | 5 | ## Usage 6 | 7 | ``` 8 | const common = require('@project/common'); 9 | 10 | // TODO: DEMONSTRATE API 11 | ``` 12 | -------------------------------------------------------------------------------- /packages/common/__tests__/common.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const common = require('..'); 4 | 5 | describe('@project/common', () => { 6 | it('needs tests'); 7 | }); 8 | -------------------------------------------------------------------------------- /packages/common/features/auth/connectors/index.d.ts: -------------------------------------------------------------------------------- 1 | import { AxiosPromise } from "axios"; 2 | import { ISingInRequest, IUserRequest, ISingInResponse, IUserDataRespons } from "../models"; 3 | export declare function signUp(obj: IUserRequest): AxiosPromise; 4 | export declare function signIn(obj: ISingInRequest): AxiosPromise; 5 | export declare function userData(obj: any): AxiosPromise; 6 | -------------------------------------------------------------------------------- /packages/common/features/videos/connector/index.d.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from 'axios'; 2 | import { IFilterVideoRequest } from '../models'; 3 | import { IVideosRespons } from '../models'; 4 | export declare const getCategories: () => Promise>; 5 | export declare const getVideos: (obj?: IFilterVideoRequest) => Promise>>; 6 | export declare const getVideo: (id: number) => Promise>; 7 | -------------------------------------------------------------------------------- /packages/common/features/videos/models/index.d.ts: -------------------------------------------------------------------------------- 1 | import { ResponseVersionCategory } from "../../Enums"; 2 | export interface IVideosRespons { 3 | id: number; 4 | created: Date; 5 | title: string; 6 | description: string; 7 | dateCreation: string; 8 | country: string; 9 | language: string; 10 | duration: number; 11 | urlTrailer: string; 12 | urlVideo: string; 13 | urlPhoto: string; 14 | category: Array; 15 | idYoutube: string; 16 | } 17 | export interface IFilterVideoRequest { 18 | page?: number; 19 | title?: string; 20 | category?: string; 21 | limit?: number; 22 | } 23 | export interface ICategoryRequest { 24 | responseVersion: ResponseVersionCategory; 25 | } 26 | -------------------------------------------------------------------------------- /packages/common/src/Const.ts: -------------------------------------------------------------------------------- 1 | export const PASSWORD_LENGTH: number = 8; -------------------------------------------------------------------------------- /packages/common/src/Enums.ts: -------------------------------------------------------------------------------- 1 | export enum ResponseMessage { 2 | PASSWORD_CHANGED = 'Password changed.', 3 | TOKEN_USED_UP = 'Token used up.', 4 | EMAIL_SEND = 'Email send.' 5 | } 6 | 7 | export enum ResponseVersionCategory { 8 | OnlyCategory = "only", 9 | Full = "" 10 | } -------------------------------------------------------------------------------- /packages/common/src/auth/connectors/index.ts: -------------------------------------------------------------------------------- 1 | import { AxiosPromise } from "axios"; 2 | import { ISingInRequest, IUserRequest, ISingInResponse, IUserDataRespons } from "../models"; 3 | import AxiosInstance from "../../config/axios/configAxios"; 4 | 5 | export function signUp(obj: IUserRequest): AxiosPromise { 6 | return AxiosInstance.post(`/auth/signup`, obj); 7 | } 8 | 9 | export function signIn(obj: ISingInRequest): AxiosPromise { 10 | return AxiosInstance.post(`/auth/signin`, obj); 11 | } 12 | 13 | export function userData(obj:any): AxiosPromise { 14 | return AxiosInstance.get(`/auth/user`, obj); 15 | } 16 | -------------------------------------------------------------------------------- /packages/common/src/auth/models/index.ts: -------------------------------------------------------------------------------- 1 | export interface IUserRequest { 2 | email: string; 3 | password: string; 4 | name: string 5 | } 6 | export interface IUserDataRespons { 7 | email: string; 8 | name: string; 9 | } 10 | 11 | export interface ISingInRequest { 12 | email: string; 13 | password: string; 14 | firebaseToken: string | null; 15 | } 16 | 17 | export interface ISingInResponse { 18 | token: string; 19 | } 20 | 21 | 22 | export interface IResetPasswordRequest { 23 | email: string; 24 | } 25 | 26 | export interface IChangePasswordRequest { 27 | token: string; 28 | password: string; 29 | } 30 | 31 | export interface IToken { 32 | token: string; 33 | dateExpired: Date; 34 | } 35 | 36 | export interface IJWTToken { 37 | id: string; 38 | email: string; 39 | iat:number; 40 | exp:number; 41 | } 42 | -------------------------------------------------------------------------------- /packages/common/src/config/axios/configAxios.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | const instance = axios.create({ 4 | timeout: 1000, 5 | headers: { 6 | Accept: "application/json", 7 | "Content-Type": "application/json", 8 | }, 9 | }); 10 | 11 | export default instance; 12 | -------------------------------------------------------------------------------- /packages/common/src/firebase-auth/connectors/index.ts: -------------------------------------------------------------------------------- 1 | import { AxiosPromise } from "axios"; 2 | import AxiosInstance from "../../config/axios/configAxios"; 3 | import { ISignInGoogleRequest, ISingInResponse } from "../models"; 4 | 5 | export function signInGoogle(obj: ISignInGoogleRequest): AxiosPromise { 6 | return AxiosInstance.post(`/firebase-auth/google`, obj); 7 | } 8 | -------------------------------------------------------------------------------- /packages/common/src/firebase-auth/models/index.ts: -------------------------------------------------------------------------------- 1 | export interface ISignInGoogleRequest { 2 | idToken?: string; 3 | } 4 | export interface ISingInResponse { 5 | token: string; 6 | } 7 | -------------------------------------------------------------------------------- /packages/common/src/index.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/common/src/index.tsx -------------------------------------------------------------------------------- /packages/common/src/videos/connector/index.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from 'axios'; 2 | import queryString from 'query-string'; 3 | import AxiosInstance from "../../config/axios/configAxios"; 4 | import {IFilterVideoRequest} from '../models'; 5 | import { IVideosRespons } from '../models' 6 | 7 | export const getCategories = async () => AxiosInstance.get("/videos/category") 8 | 9 | 10 | export const getVideos = async (obj?:IFilterVideoRequest):Promise>> => { 11 | return AxiosInstance.get(`/videos?${queryString.stringify(obj)}`) 12 | } 13 | 14 | export const getVideo = async (id:number):Promise> => { 15 | return AxiosInstance.get(`/videos/video/${id}`) 16 | } -------------------------------------------------------------------------------- /packages/common/src/videos/models/index.ts: -------------------------------------------------------------------------------- 1 | import { ResponseVersionCategory } from "../../Enums"; 2 | 3 | export interface IVideosRespons { 4 | id: number, 5 | created: Date, 6 | title: string, 7 | description: string, 8 | dateCreation: string, 9 | country: string, 10 | language: string, 11 | duration: number, 12 | urlTrailer: string, 13 | urlVideo: string, 14 | urlPhoto: string, 15 | category: Array, 16 | idYoutube: string 17 | } 18 | 19 | 20 | export interface IFilterVideoRequest { 21 | page?: number; 22 | title?: string; 23 | category?: string; 24 | limit?: number 25 | } 26 | 27 | export interface ICategoryRequest { 28 | responseVersion: ResponseVersionCategory; 29 | } -------------------------------------------------------------------------------- /packages/common/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "lib": ["es2017", "es7", "es6", "dom"], 6 | "declaration": true, 7 | "outDir": "features", 8 | "strict": false, 9 | "esModuleInterop": true, 10 | "experimentalDecorators":true 11 | }, 12 | "include": [ 13 | "./src" 14 | ], 15 | "exclude": [ 16 | "node_modules", 17 | "**/*.spec.ts", 18 | "AppData", 19 | "../mobile/*.ts", 20 | "../mobile/*.ts" 21 | ] 22 | } -------------------------------------------------------------------------------- /packages/frontend/.env.production: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/frontend/.env.production -------------------------------------------------------------------------------- /packages/frontend/.env.test: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/frontend/.env.test -------------------------------------------------------------------------------- /packages/frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | package-lock.json 26 | -------------------------------------------------------------------------------- /packages/frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/frontend/public/favicon.ico -------------------------------------------------------------------------------- /packages/frontend/public/img/allerts/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/check-board.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /packages/frontend/public/img/iconmonstr-arrow-25.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/iconmonstr-arrow-64.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/lens.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/logout.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/navBarImg/Oval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/frontend/public/img/navBarImg/Oval.png -------------------------------------------------------------------------------- /packages/frontend/public/img/navBarImg/allerts.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/navBarImg/filters.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/mute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/normal-screen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/small-mode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/small-screen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/videoPlayer/un-mute.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/watched.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/img/x-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [], 5 | "start_url": ".", 6 | "display": "standalone", 7 | "theme_color": "#000000", 8 | "background_color": "#ffffff" 9 | } 10 | -------------------------------------------------------------------------------- /packages/frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | -------------------------------------------------------------------------------- /packages/frontend/public/video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/frontend/public/video.mp4 -------------------------------------------------------------------------------- /packages/frontend/src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | import App from './App'; 4 | 5 | test('renders learn react link', () => { 6 | const { getByText } = render(); 7 | const linkElement = getByText(/learn react/i); 8 | expect(linkElement).toBeInTheDocument(); 9 | }); 10 | -------------------------------------------------------------------------------- /packages/frontend/src/config/axios/models/index.ts: -------------------------------------------------------------------------------- 1 | export enum ServerStatus { 2 | CONFLICT = 409, 3 | UNAUTHORIZED = 401, 4 | SERVER_ERROR = 500, 5 | } 6 | -------------------------------------------------------------------------------- /packages/frontend/src/config/firebase/firebaseInit.ts: -------------------------------------------------------------------------------- 1 | import firebase from "firebase/app"; 2 | import "firebase/messaging"; 3 | import "firebase/auth"; 4 | 5 | const firebaseConfig = { 6 | apiKey: process.env.REACT_APP_FIREBASE_API_KEY, 7 | authDomain: "codetutorials-f9ede.firebaseapp.com", 8 | databaseURL: "https://codetutorials-f9ede.firebaseio.com/", 9 | projectId: "codetutorials-f9ede", 10 | storageBucket: "codetutorials-f9ede.appspot.com", 11 | messagingSenderId: "29847575452", 12 | appId: "1:29847575452:web:1396be3ecb16e7c16c4659", 13 | measurementId: "G-8J72TLB6RZ", 14 | }; 15 | const fb = firebase.initializeApp(firebaseConfig); 16 | 17 | export const auth = fb.auth(); 18 | export const provider = new firebase.auth.GoogleAuthProvider(); 19 | 20 | export default fb; 21 | -------------------------------------------------------------------------------- /packages/frontend/src/config/redux/popups/popupsReducer.tsx: -------------------------------------------------------------------------------- 1 | import { PopUpsActionType, PopUpsActions } from "./popUpsActions"; 2 | 3 | const initState = { 4 | user: false, 5 | alerts: false, 6 | teams: false, 7 | x: false, 8 | y: false, 9 | }; 10 | 11 | export const popUpsReducer = (state = initState, action: PopUpsActionType) => { 12 | const { type, payload } = action; 13 | switch (type) { 14 | case PopUpsActions.SET_POPUP_ACTIVE: 15 | return { ...state, [payload.name]: true }; 16 | case PopUpsActions.DISMISS_POPUP: 17 | return { ...state, [payload.name]: false }; 18 | case PopUpsActions.CLEAR_POPUPS_DATA: 19 | return { ...initState }; 20 | default: 21 | return state; 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /packages/frontend/src/config/redux/rootReducer.tsx: -------------------------------------------------------------------------------- 1 | import { combineReducers } from "redux"; 2 | import { filtersReducer } from "../../features/filters/reducer/filtersReducer"; 3 | 4 | import { movieReducer } from "./videoPlayer/reducer"; 5 | import { videoTabsReducer } from "./videoTabs/videoTabsReducer"; 6 | import { popUpsReducer } from "./popups/popupsReducer"; 7 | 8 | const rootReducer = combineReducers({ 9 | movie: movieReducer, 10 | videoTabs: videoTabsReducer, 11 | popUps: popUpsReducer, 12 | filters: filtersReducer, 13 | }); 14 | 15 | export default rootReducer; 16 | -------------------------------------------------------------------------------- /packages/frontend/src/config/redux/store.tsx: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import RootReducer from './rootReducer' 3 | import thunk from 'redux-thunk' 4 | 5 | const composeEnhancers = window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__' as any] as any || compose; 6 | const Store = createStore(RootReducer, composeEnhancers(applyMiddleware(thunk)) 7 | ); 8 | 9 | export default Store -------------------------------------------------------------------------------- /packages/frontend/src/config/redux/videoTabs/actions.ts: -------------------------------------------------------------------------------- 1 | export enum Actions { 2 | SET_ACTIVE_TAB = "setActiveTab", 3 | SET_DEFAULT_TAB = "setDefaultTab", 4 | } 5 | 6 | interface ActiveTabData { 7 | activeTab: string; 8 | } 9 | 10 | export type VideoTabsAction = 11 | | { type: Actions.SET_ACTIVE_TAB, payload: ActiveTabData } 12 | | { type: Actions.SET_DEFAULT_TAB, payload: any }; 13 | 14 | 15 | export const setActiveTab = (data: ActiveTabData) => { 16 | return { 17 | type: Actions.SET_ACTIVE_TAB, 18 | payload: data.activeTab, 19 | }; 20 | }; 21 | 22 | export const setDefaultTab = () => { 23 | return { 24 | type: Actions.SET_DEFAULT_TAB, 25 | }; 26 | }; 27 | -------------------------------------------------------------------------------- /packages/frontend/src/config/redux/videoTabs/videoTabsReducer.tsx: -------------------------------------------------------------------------------- 1 | import {Actions, VideoTabsAction} from "./actions" 2 | 3 | 4 | export enum Tabs { 5 | DESCRIPTION = "description", 6 | TASKS = "tasks", 7 | NOTES = "notes" 8 | } 9 | 10 | const initState = { 11 | activeTab: Tabs.DESCRIPTION 12 | } 13 | 14 | export const videoTabsReducer = (state = initState, action: VideoTabsAction) => { 15 | const {type, payload} = action 16 | switch (type){ 17 | case Actions.SET_ACTIVE_TAB: 18 | return {activeTab: payload} 19 | case Actions.SET_DEFAULT_TAB: 20 | return {activeTab: Tabs.DESCRIPTION} 21 | default: 22 | return state 23 | } 24 | } -------------------------------------------------------------------------------- /packages/frontend/src/config/routing/NavigationPath.tsx: -------------------------------------------------------------------------------- 1 | export enum Navigation { 2 | MOVIES = "/videos", 3 | SERIES = "/seriale", 4 | LOGIN = "/login", 5 | REGISTER = "/register", 6 | MOVIELIST = "/movielist", 7 | MOVIE = "/movie", 8 | HOME = "/" 9 | } 10 | 11 | -------------------------------------------------------------------------------- /packages/frontend/src/features/allertsPanel/components/Description.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from "styled-components" 3 | 4 | 5 | const AllertDescTxt = styled.p` 6 | font-size: 14px; 7 | text-align: left; 8 | line-height: 24px; 9 | ` 10 | 11 | const Description: React.SFC = () => { 12 | return ( 13 | 14 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto minus mollitia asperiores, totam nam maiores quia labore sapiente nulla fugit aperiam voluptate distinctio, dignissimos ratione sunt ut, illum ullam molestias!Commodi 15 | 16 | ); 17 | } 18 | 19 | export default Description; -------------------------------------------------------------------------------- /packages/frontend/src/features/auth/action/validationSchema.tsx: -------------------------------------------------------------------------------- 1 | import * as yup from "yup"; 2 | import { ErrorMessages, Fields } from "../enums"; 3 | 4 | export const validationSchema = yup.object().shape({ 5 | email: yup 6 | .string() 7 | .label(Fields.EMAIL) 8 | .email(ErrorMessages.WRONG_EMAIL) 9 | .required(ErrorMessages.REQUIRED_EMAIL) 10 | .max(255), 11 | password: yup 12 | .string() 13 | .label(Fields.PASSWORD) 14 | .min(8, ErrorMessages.MIN_LENGHT_PASSWORD) 15 | .max(255) 16 | .required(ErrorMessages.REQUIRED_PASSWORD), 17 | passwordConfirmation: yup 18 | .string() 19 | .label(Fields.PASSWORD_CONFIRMATION) 20 | .min(8, ErrorMessages.MIN_LENGHT_PASSWORD) 21 | .max(255) 22 | .oneOf([yup.ref(Fields.PASSWORD)], ErrorMessages.SAME_PASSWORD) 23 | .required(ErrorMessages.REQUIRED_PASSWORD), 24 | }); 25 | -------------------------------------------------------------------------------- /packages/frontend/src/features/auth/components/ProtectedRoute.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component, ReactType, useCallback } from "react"; 2 | import { Route, Redirect } from "react-router-dom"; 3 | import { Navigation } from "../../../config/routing/NavigationPath"; 4 | interface ProtectedProps { 5 | component: ReactType; 6 | path?: string; 7 | exact?: boolean; 8 | } 9 | 10 | const ProtectedRoute = ({ component: Component, ...rest }: ProtectedProps) => { 11 | const handleTokenCheck = useCallback(() => { 12 | const token = sessionStorage.getItem("token"); 13 | if (token) return ; 14 | else return ; 15 | }, [rest]); 16 | 17 | return ; 18 | }; 19 | export default ProtectedRoute; 20 | -------------------------------------------------------------------------------- /packages/frontend/src/features/auth/components/SignInComponents/RecoveryPass.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styled from "styled-components"; 3 | import { Link } from "react-router-dom"; 4 | import { FontSize } from "../../../common/styles/constans/FontSize"; 5 | import { Colors } from "../../../common/styles/constans/Colors"; 6 | import { Device } from "../../../common/styles/constans/Device"; 7 | const StyledLink = styled(Link)` 8 | color: ${Colors.LIGHT_PURPLE}; 9 | font-size: ${FontSize.XXXXMEDIUM}; 10 | text-decoration: none; 11 | padding: 50px 0; 12 | text-align: center; 13 | @media ${Device.TABLET} { 14 | text-align: right; 15 | } 16 | `; 17 | 18 | const RecoveryPass: React.FC = (props: any) => { 19 | return Zapomniałeś hasła?; 20 | }; 21 | 22 | export default RecoveryPass; 23 | -------------------------------------------------------------------------------- /packages/frontend/src/features/auth/components/SignUpComponents/SignInRedirect.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styled from "styled-components"; 3 | import { Link } from "react-router-dom"; 4 | import { FontSize } from "../../../common/styles/constans/FontSize"; 5 | import { Colors } from "../../../common/styles/constans/Colors"; 6 | import { Navigation } from "../../../../config/routing/NavigationPath"; 7 | 8 | const StyledLink = styled(Link)` 9 | color: ${Colors.LIGHT_PURPLE}; 10 | font-size: ${FontSize.XXXXMEDIUM}; 11 | text-decoration: none; 12 | text-align: center; 13 | margin-top: 50px; 14 | `; 15 | 16 | const SignInRedirect: React.FC = () => { 17 | return ( 18 | Posiadasz konto? Zaloguj się 19 | ); 20 | }; 21 | export default SignInRedirect; 22 | -------------------------------------------------------------------------------- /packages/frontend/src/features/auth/enums.tsx: -------------------------------------------------------------------------------- 1 | export enum Fields { 2 | EMAIL = "email", 3 | PASSWORD = "password", 4 | PASSWORD_CONFIRMATION = "passwordConfirmation", 5 | } 6 | export enum FieldsPlaceholders { 7 | EMAIL = "Email", 8 | PASSWORD = "Hasło", 9 | REPEAT_PASSWORD = "Powtórz hasło", 10 | } 11 | 12 | export enum ErrorMessages { 13 | WRONG_EMAIL = "Podaj poprawny email", 14 | REQUIRED_EMAIL = "Podaj email", 15 | REQUIRED_PASSWORD = "Podaj hasło", 16 | MIN_LENGHT_PASSWORD = "Hasło musi mieć minimum 8 znaków", 17 | MAX_LENGHT_PASSWORD = "Hasło powinno mieć maksymalnie 20 znaków", 18 | SAME_PASSWORD = "Hasła muszą być takie same", 19 | DUPLICATE_EMAIL = "Email jest już w użytku", 20 | SERVER_CRUSHED = "Problem z serwerem", 21 | ACCOUNT_NOT_FOUND = "Nieprawidłowe dane logowania", 22 | } 23 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/form/ErrorMsg.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styled from "styled-components"; 3 | import { Colors } from "../../styles/constans/Colors"; 4 | 5 | const Wrapper = styled.div` 6 | position: absolute; 7 | right: 0; 8 | top: -27px; 9 | width: 100%; 10 | color: ${Colors.nRed}; 11 | text-align: center; 12 | transition: 0.2s ease-in; 13 | opacity: 0.7; 14 | `; 15 | 16 | interface ErrorPopUpInterface { 17 | error: string; 18 | } 19 | 20 | const ErrorMsg: React.FC = ({ error }) => { 21 | return ( 22 | 23 |

{error}

24 |
25 | ); 26 | }; 27 | export default ErrorMsg; 28 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/form/TitleForm.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import styled from "styled-components"; 3 | import { FontSize } from "../../styles/constans/FontSize"; 4 | import { Colors } from "../../styles/constans/Colors"; 5 | import { fontWeight } from "../../styles/constans/fontWeight"; 6 | 7 | const Title = styled.h1` 8 | color: ${Colors.nBlack}; 9 | font-size: ${FontSize.BIG}; 10 | font-weight: ${fontWeight.MEDIUM}; 11 | padding-bottom: 50px; 12 | `; 13 | interface TitleFormProps { 14 | title: string; 15 | } 16 | const TitleForm: React.FC = ({ title }) => { 17 | return {title}; 18 | }; 19 | 20 | export default TitleForm; 21 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/ClosePopUp.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from "styled-components" 3 | 4 | import {usePopUp} from "../../hooks/usePopUp" 5 | 6 | const Ximg = styled.img<{name: string}>` 7 | width: 30px; 8 | position: absolute; 9 | top: 13px; 10 | right: 13px; 11 | cursor: pointer; 12 | `; 13 | 14 | interface ClosePopUpProps { 15 | name: string 16 | } 17 | 18 | const ClosePopUp: React.SFC = ({name}) => { 19 | const {closePopUp} = usePopUp() 20 | 21 | return ( ); 22 | } 23 | 24 | export default ClosePopUp; -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/PopUps.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {useSelector, RootStateOrAny} from "react-redux" 3 | 4 | import UserPanel from "../layout/userPanel/UserPanel"; 5 | import AllertsContainer from "../../../allertsPanel/components/AllertsPanel"; 6 | 7 | 8 | const PopUps: React.SFC = () => { 9 | const active = useSelector((state: RootStateOrAny) => state.popUps) 10 | 11 | return ( 12 | <> 13 | 14 | 15 | 16 | ); 17 | } 18 | 19 | export default PopUps; -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/navBar/Btn.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "styled-components"; 3 | 4 | 5 | import { Device } from "../../../styles/constans/Device"; 6 | 7 | const Wrapper = styled.button` 8 | display: flex; 9 | border: none; 10 | outline: none; 11 | background-color: transparent; 12 | cursor: pointer; 13 | `; 14 | const BtnImg = styled.img` 15 | @media ${Device.TABLET} { 16 | width: 28px; 17 | } 18 | @media ${Device.LAPTOP} { 19 | width: 34px; 20 | } 21 | `; 22 | 23 | export interface BtnProps { 24 | src: string; 25 | name: string 26 | showPopUp(e: any): void 27 | } 28 | 29 | const Btn: React.SFC = ({ src, name, showPopUp }) => { 30 | 31 | return ( 32 | 33 | 34 | 35 | ); 36 | }; 37 | 38 | export default Btn; 39 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/navBar/UserImg.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "styled-components"; 3 | 4 | import { Device } from "../../../styles/constans/Device"; 5 | import { BtnsType } from "./BtnsSection"; 6 | import { usePopUp } from "../../../hooks/usePopUp"; 7 | 8 | const Img = styled.img<{ name: string }>` 9 | width: 37px; 10 | margin-right: 13px; 11 | margin-left: 13px; 12 | cursor: pointer; 13 | 14 | @media ${Device.TABLET} { 15 | width: 50px; 16 | } 17 | `; 18 | 19 | const UserImg: React.SFC = () => { 20 | const { showPopUp } = usePopUp(); 21 | 22 | return ( 23 | 28 | ); 29 | }; 30 | 31 | export default UserImg; 32 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/navBar/UserName.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "styled-components"; 3 | 4 | import { Device } from "../../../styles/constans/Device"; 5 | import { fontWeight } from "../../../styles/constans/fontWeight"; 6 | import { FontSize } from "../../../styles/constans/FontSize"; 7 | 8 | const Name = styled.h4` 9 | display: none; 10 | font-size: ${FontSize.MEDIUM}; 11 | font-weight: ${fontWeight.SEMI_BOLD}; 12 | margin-left: 9px; 13 | margin-right: 9px; 14 | @media ${Device.LAPTOP}{ 15 | display: block; 16 | } 17 | `; 18 | 19 | export interface UserNameProps { 20 | name: string; 21 | } 22 | 23 | const UserName: React.SFC = ({ name }) => { 24 | return {name}; 25 | }; 26 | 27 | export default UserName; 28 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/userPanel/ActionsSection.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from 'styled-components'; 3 | 4 | import GoToBtn from "./GoToBtn" 5 | 6 | const Wrapper = styled.div` 7 | margin-top: 50px; 8 | height: 100%; 9 | width: 100%; 10 | ` 11 | 12 | 13 | const ActionsSection: React.SFC = () => { 14 | return ( 15 | 16 | 17 | 18 | 19 | 20 | ); 21 | } 22 | 23 | export default ActionsSection; -------------------------------------------------------------------------------- /packages/frontend/src/features/common/components/layout/videoTabs/Title.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from "styled-components" 3 | import {FontSize} from "../../../styles/constans/FontSize" 4 | import {fontWeight} from "../../../styles/constans/fontWeight" 5 | import {Device} from "../../../styles/constans/Device" 6 | 7 | export interface TitleProps { 8 | title: string 9 | } 10 | 11 | const TitleTxt = styled.p` 12 | display: none; 13 | font-size: ${FontSize.MEDIUM}; 14 | font-weight: ${fontWeight.BOLD}; 15 | padding-left: 29px; 16 | padding-top: 29px; 17 | padding-bottom: 29px; 18 | @media ${Device.LAPTOP}{ 19 | display: block; 20 | } 21 | ` 22 | 23 | const Title: React.SFC = ({title}) => { 24 | return ( 25 | {title} 26 | ); 27 | } 28 | 29 | export default Title; -------------------------------------------------------------------------------- /packages/frontend/src/features/common/hooks/usePopUp.ts: -------------------------------------------------------------------------------- 1 | import { useDispatch } from "react-redux"; 2 | import { useCallback } from "react"; 3 | 4 | import { setPopUpActive, dismissPopUp } from "../../../config/redux/popups/popUpsActions"; 5 | 6 | interface CustomMouseEvent { 7 | currentTarget: { 8 | name: string 9 | } 10 | } 11 | 12 | export const usePopUp = () => { 13 | const dispatch = useDispatch(); 14 | 15 | const showPopUp = useCallback((e: CustomMouseEvent) => { 16 | const popUpData = { name: e.currentTarget.name }; 17 | dispatch(setPopUpActive(popUpData)); 18 | }, []); 19 | 20 | const closePopUp = useCallback((e: CustomMouseEvent) => { 21 | const popUpData = { name: e.currentTarget.name}; 22 | dispatch(dismissPopUp(popUpData)) 23 | },[]) 24 | 25 | return { 26 | showPopUp, 27 | closePopUp 28 | }; 29 | }; 30 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/hooks/useVisibleHeader.ts: -------------------------------------------------------------------------------- 1 | import { useState, useEffect, useCallback } from "react"; 2 | export const useVisibleHeader = (isMoviePaused: boolean, hide?: boolean) => { 3 | const [visible, setVisible] = useState(true); 4 | const handleHeaderVisiblity = useCallback(() => { 5 | if (!isMoviePaused && hide) return setVisible(false); 6 | else return setVisible(true); 7 | },[isMoviePaused, hide]); 8 | useEffect(() => { 9 | handleHeaderVisiblity(); 10 | 11 | }, [isMoviePaused, handleHeaderVisiblity]); 12 | return visible; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/Colors.ts: -------------------------------------------------------------------------------- 1 | export enum Colors { 2 | nRed = "#e50914", 3 | nLightRed = "#e60914", 4 | nBlack = "black", 5 | nGrey = "#222", 6 | nLightGrey = "#999", 7 | nWhite = "#ddd", 8 | WHITE = "#ffffff", 9 | VERY_LIGHT_GRAY = "#EEE", 10 | BLACK_OPACITY = "rgba(0,0,0,0.15)", 11 | BLACK = "black", 12 | GRAY = "gray", 13 | OPACITY_GRAY = "#00000029", 14 | OPACITY_VERY_LIGHT_GRAY = "#00000005", 15 | DARK_BLUE = "#151965", 16 | MEDIUM_GRAY = "#AAAAAA", 17 | VERY_LIGHT_PURPLE = "#D9DAE6", 18 | LIGHT_OPACITY_BLACK = "#0000000D", 19 | GRAY_1 = "#707070", 20 | ULTRA_LIGHT_GRAY = "#F9F9F9", 21 | LIGHT_PURPLE = "#a08ef4", 22 | } 23 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/Device.ts: -------------------------------------------------------------------------------- 1 | export enum Device { 2 | MOBILE_S = `(min-width: 320px)`, 3 | MOBILE_M = `(min-width: 375px)`, 4 | MOBILE_L = `(min-width: 425px)`, 5 | TABLET = `(min-width: 768px)`, 6 | TABLET_L = `(min-width: 1024px)`, 7 | LAPTOP = `(min-width: 1280px)`, 8 | LAPTOP_L = `(min-width: 1440px)`, 9 | DESKTOP = `(min-width: 2560px)`, 10 | } 11 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/FontFamily.ts: -------------------------------------------------------------------------------- 1 | export enum FontFamily { 2 | MONTSERRAT = " 'Montserrat', sans-serif;", 3 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/FontSize.tsx: -------------------------------------------------------------------------------- 1 | export enum FontSize { 2 | XXXXXXSMALL = "8px", 3 | XXXXXSMALL = "9px", 4 | VERY_SMALL = "10px", 5 | XXXXSMALL = "11px", 6 | XXXSMALL = "12px", 7 | XSMALL = "14px", 8 | SMALL = "15px", 9 | XXXXMEDIUM = "16px", 10 | XXMEDIUM = "18px", 11 | MEDIUM = "20px", 12 | XXMEDIUM_L = "23px", 13 | XMEDIUM_L = "24px", 14 | MEDIUM_L = "25px", 15 | XXBIG = "28px", 16 | BIG = "30px", 17 | VERY_BIG = "35px", 18 | HUGE = "40px", 19 | } 20 | -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/Sizes.ts: -------------------------------------------------------------------------------- 1 | export enum Sizes{ 2 | BANNER_MOBILE = "55px", 3 | ASIDE = "446px" 4 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/common/styles/constans/fontWeight.tsx: -------------------------------------------------------------------------------- 1 | export enum fontWeight { 2 | LIGHT = 300, 3 | REGULAR = 400, 4 | MEDIUM = 500, 5 | SEMI_BOLD = 600, 6 | BOLD = 700, 7 | BLACK = 900, 8 | } 9 | -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/hooks/useCategories.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import {getCategories} from "@project/common/features/videos/connector" 3 | import {Categorie} from "../components/Categories" 4 | 5 | export const useCategories = () => { 6 | const [data, setData] = useState>([]); 7 | 8 | const getData = async () => { 9 | const res = await getCategories(); 10 | setData(res.data) 11 | }; 12 | 13 | useEffect(() => { 14 | getData() 15 | },[]); 16 | 17 | return {data}; 18 | }; 19 | -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/hooks/useFormDelay.tsx: -------------------------------------------------------------------------------- 1 | import {useEffect, useRef} from "react" 2 | import _ from "lodash" 3 | 4 | export const useFormDelay = (formik: any, phrase: string) => { 5 | const timer = useRef(0) 6 | const handleTyping = (e: React.ChangeEvent) => { 7 | clearTimeout(timer.current) 8 | formik.handleChange(e); 9 | } 10 | 11 | useEffect(() => { 12 | phrase && (timer.current = _.delay(formik.submitForm, 1000)) 13 | },[phrase, formik.submitForm]) 14 | 15 | return{ 16 | handleTyping 17 | } 18 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/hooks/useFormikData.tsx: -------------------------------------------------------------------------------- 1 | import { useDispatch, useSelector, RootStateOrAny } from "react-redux"; 2 | import { useHistory } from "react-router-dom"; 3 | 4 | import { setSearchPhrase } from "../reducer/filtersActions"; 5 | 6 | export const useFormikData = () => { 7 | const title = useSelector((state: RootStateOrAny) => state.filters.searchPhrase); 8 | const dispatch = useDispatch(); 9 | const history = useHistory(); 10 | 11 | const submit = (serchPhrase: string) => { 12 | dispatch(setSearchPhrase(serchPhrase)); 13 | history.push("/movielist"); 14 | }; 15 | 16 | return { 17 | submit, 18 | title 19 | }; 20 | }; 21 | -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/reducer/filtersActions.ts: -------------------------------------------------------------------------------- 1 | import {Actions} from "./types" 2 | 3 | export function setCategories(payload: Array): any { 4 | return { 5 | type: Actions.SET_CATEGORIES, 6 | payload 7 | } 8 | } 9 | 10 | 11 | export function setSearchPhrase(payload: string): any { 12 | return { 13 | type: Actions.SET_SEARCH_PHRASE, 14 | payload 15 | } 16 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/reducer/filtersReducer.ts: -------------------------------------------------------------------------------- 1 | import {Actions, FiltersState} from "./types" 2 | 3 | const initState: FiltersState = { 4 | categories: [], 5 | searchPhrase: "" 6 | } 7 | 8 | export const filtersReducer = (state = initState, action: any) => { 9 | switch(action.type){ 10 | case Actions.SET_CATEGORIES: 11 | return {...state, categories: action.payload} 12 | case Actions.SET_SEARCH_PHRASE: 13 | return {...state, searchPhrase: action.payload} 14 | default: 15 | return state; 16 | } 17 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/filters/reducer/types.ts: -------------------------------------------------------------------------------- 1 | export interface FiltersState { 2 | categories: Array; 3 | searchPhrase: string; 4 | } 5 | 6 | export enum Actions { 7 | SET_CATEGORIES = "SET_CATEGORIES", 8 | SET_SEARCH_PHRASE = "set_search_phrase" 9 | } 10 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/actions/ReduxActions.tsx: -------------------------------------------------------------------------------- 1 | import { RootStateOrAny } from "react-redux"; 2 | 3 | export const getMovieState = (state: RootStateOrAny) => state.movie 4 | 5 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/actions/checkButtonType .tsx: -------------------------------------------------------------------------------- 1 | import { ButtonTypes } from "../enums"; 2 | 3 | export const checkButtonType = (type: string, videoState: boolean) => { 4 | if (type === ButtonTypes.PLAY) { 5 | return videoState 6 | } else { 7 | return !videoState 8 | } 9 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/actions/handleVideoContainerRef.ts: -------------------------------------------------------------------------------- 1 | import { refsStore } from "../refs.store"; 2 | interface IVideoContainerRef { 3 | current: HTMLDivElement | null 4 | } 5 | 6 | export const handleVideoContainerRef = (videoContainerRef:IVideoContainerRef, small?:string) => { 7 | if (videoContainerRef.current !== null) { 8 | small 9 | ? (refsStore.ContainerRefs[0] = videoContainerRef.current) 10 | : (refsStore.ContainerRefs[1] = videoContainerRef.current); 11 | } 12 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/actions/handleVideoRef.ts: -------------------------------------------------------------------------------- 1 | import { refsStore } from "../refs.store"; 2 | interface IVideoRef { 3 | current: HTMLVideoElement | null 4 | } 5 | 6 | export const handleVideoRef = (videoRef:IVideoRef, small?:string) => { 7 | if (videoRef.current !== null) { 8 | small ? (refsStore.VideoRefs[0] = videoRef.current) : (refsStore.VideoRefs[1] = videoRef.current); 9 | } 10 | } -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/actions/videoPlayerActions.tsx: -------------------------------------------------------------------------------- 1 | import { setTime } from "../../../config/redux/videoPlayer/actions"; 2 | 3 | export const playPauseVideo = (video: HTMLVideoElement, isPaused: boolean) => { 4 | if (isPaused) { 5 | video.play(); 6 | } else { 7 | video?.pause(); 8 | } 9 | }; 10 | 11 | export const videoResize = (videoContainer: HTMLDivElement, isFullscreen: boolean) => { 12 | if (!isFullscreen) { 13 | videoContainer.requestFullscreen(); 14 | } else { 15 | document.exitFullscreen(); 16 | } 17 | }; 18 | 19 | export const rewindVideoTime = (video: HTMLVideoElement, timeskip: number) => { 20 | video.currentTime += timeskip; 21 | setTime((video.currentTime / video.duration) * 100); 22 | }; 23 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/enums.tsx: -------------------------------------------------------------------------------- 1 | export enum ButtonTypes { 2 | PLAY = "play", 3 | MUTE = "mute", 4 | CINEMA_MODE = "cinema mode", 5 | FULLSCREEN = "full screen", 6 | SMALL_MODE = "small mode", 7 | } 8 | export enum Keys { 9 | SPACE = 32, 10 | LEFT = 37, 11 | RIGHT = 39, 12 | ESC = 27, 13 | } 14 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videoPlayer/refs.store.tsx: -------------------------------------------------------------------------------- 1 | class RefsStore { 2 | VideoRefs: HTMLVideoElement[] = []; 3 | ContainerRefs: HTMLDivElement[] = []; 4 | } 5 | 6 | export const refsStore = new RefsStore(); 7 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videos/action/movieArray.tsx: -------------------------------------------------------------------------------- 1 | const movieArray = 2 | { 3 | id: 1, 4 | name: "Java 11 Optional - możliwości jakie dostarcza typ optional w Java i Spring", 5 | rate: 8, 6 | hashtag: ["Java", "Java 11 Optional"], 7 | level: 'zaawansowany', 8 | date: '27 stycznia 2020', 9 | describe: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor.' 10 | } 11 | 12 | export const getMovie = (id: string) => { 13 | return movieArray; 14 | }; 15 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videos/components/singleVideoComponents/Description.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import styled from "styled-components"; 3 | 4 | import { FontSize } from "../../../common/styles/constans/FontSize"; 5 | import { Device } from "../../../common/styles/constans/Device"; 6 | 7 | const DescTxt = styled.p` 8 | width: 100%; 9 | text-align: left; 10 | margin-top: 15px; 11 | font-size: ${FontSize.XSMALL}; 12 | @media ${Device.TABLET} { 13 | font-size: ${FontSize.MEDIUM}; 14 | margin-top: 43px; 15 | padding-bottom: 30px; 16 | } 17 | `; 18 | 19 | interface DescriptionProps { 20 | desc: string; 21 | } 22 | 23 | const Description: React.SFC = ({ desc }) => { 24 | return {desc}; 25 | }; 26 | 27 | export default Description; 28 | -------------------------------------------------------------------------------- /packages/frontend/src/features/videos/components/singleVideoComponents/VideoPlayerComponent.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components'; 3 | import { Device } from '../../../common/styles/constans/Device'; 4 | 5 | const StyledVideo = styled.video` 6 | width: 100%; 7 | 8 | @media ${Device.LAPTOP} { 9 | flex-direction: row; 10 | width:calc(100% - 443px); 11 | } 12 | `; 13 | 14 | class VideoPlayerComponent extends React.Component{ 15 | 16 | render() { 17 | return ( 18 | 19 | 20 | 21 | ) 22 | } 23 | } 24 | 25 | export default VideoPlayerComponent; -------------------------------------------------------------------------------- /packages/frontend/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from "./App"; 4 | import * as serviceWorker from "./serviceWorker"; 5 | import { Provider } from "react-redux"; 6 | import Store from "./config/redux/store"; 7 | import { axiosInit } from "./config/axios/axiosInit"; 8 | 9 | axiosInit(); 10 | 11 | ReactDOM.render( 12 | 13 | 14 | , 15 | document.getElementById("root") 16 | ); 17 | 18 | serviceWorker.registerSW(); 19 | -------------------------------------------------------------------------------- /packages/frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/frontend/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom/extend-expect'; 6 | -------------------------------------------------------------------------------- /packages/frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext", "es5", "es6"], 5 | "outDir": "./lib", 6 | "allowJs": true, 7 | "skipLibCheck": true, 8 | "esModuleInterop": true, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react" 18 | }, 19 | "include": ["src"] 20 | } 21 | -------------------------------------------------------------------------------- /packages/mobile/. gitattributes: -------------------------------------------------------------------------------- 1 | # specific for windows script files 2 | *.bat text eol=crlf -------------------------------------------------------------------------------- /packages/mobile/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /packages/mobile/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | parser: '@typescript-eslint/parser', 5 | plugins: ['@typescript-eslint'], 6 | }; 7 | -------------------------------------------------------------------------------- /packages/mobile/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /packages/mobile/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/mobile/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /packages/mobile/App.tsx: -------------------------------------------------------------------------------- 1 | import React, {Component, useReducer} from 'react'; 2 | import DrawerNavigation from './src/config/routing/DrawerNavigation'; 3 | import { NotificationStoreProvider } from './src/features/notifications/NotificationStoreProvider'; 4 | import Orientation from 'react-native-orientation'; 5 | 6 | 7 | class App extends Component { 8 | 9 | constructor(props){ 10 | super(props) 11 | Orientation.lockToPortrait(); 12 | } 13 | 14 | render() { 15 | return ( 16 | 17 | 18 | 19 | ) 20 | } 21 | } 22 | export default App -------------------------------------------------------------------------------- /packages/mobile/README.md: -------------------------------------------------------------------------------- 1 | # myNetflix android 2 | Projekt szkoleniowy w ramach inicjatywy devLeaders. Zespół stworzy klona Netflix z użyciem React, Ract Native, NestJS 3 | 4 | # Instrukcja uruchomienia projektu android 5 | 1. w katalogu myNetflix/packages/mobile podaj komendy: 6 | - npm install 7 | - npm run android 8 | 9 | Spowoduje to uruchomienie MetroBundler na porcie 8081 i odpali android symulator. 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/mobile/__tests__/App-test.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | it('renders correctly', () => { 13 | renderer.create(); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/mobile/android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /packages/mobile/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/debug.keystore -------------------------------------------------------------------------------- /packages/mobile/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -keep class com.facebook.hermes.unicode.** { *; } 12 | -keep class com.facebook.jni.** { *; } -------------------------------------------------------------------------------- /packages/mobile/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/assets/fonts/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/assets/fonts/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/assets/fonts/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/assets/fonts/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/assets/fonts/Montserrat-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/assets/fonts/Montserrat-SemiBold.ttf -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/java/com/mobile/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.mobile; 2 | 3 | // import android.os.Bundle; 4 | 5 | import com.facebook.react.ReactActivity; 6 | // import org.devio.rn.splashscreen.SplashScreen; 7 | 8 | public class MainActivity extends ReactActivity { 9 | /** 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | SplashScreen.show(this); 13 | super.onCreate(savedInstanceState); 14 | } 15 | *//** 16 | * Returns the name of the main component registered from JavaScript. This is used to schedule 17 | * rendering of the component. 18 | */ 19 | @Override 20 | protected String getMainComponentName() { 21 | return "mobile"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/java/com/mobile/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package com.mobile; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | 6 | import androidx.appcompat.app.AppCompatActivity; 7 | 8 | public class SplashActivity extends AppCompatActivity { 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | 13 | Intent intent = new Intent(this, MainActivity.class); 14 | startActivity(intent); 15 | finish(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/arrow.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/back_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/back_arrow.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/background_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/bykcct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/bykcct.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/email.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/eye.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/facebook.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/google.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/h.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/heart.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/heart.JPG -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_alert.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_arrow_down.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_arrowright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_arrowright.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_burger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_burger.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_drawer.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_heart.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_logout.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_magnifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_magnifier.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_menu.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_play.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_player.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_playlist.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_profile.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_qr.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_search.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_tasks.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_team.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/ic_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/ic_user.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/icon.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/icon2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/icon2x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/icon3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/icon3x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/info.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/mainheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/mainheader.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/movie1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/movie1.jpg -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/movie2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/movie2.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/movie3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/movie3.jpg -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/movie4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/movie4.jpg -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/movie5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/movie5.jpg -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/password.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/play.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/play_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/play_brown.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/plus.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/square.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/twitter.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/user.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/drawable/xsmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/drawable/xsmall.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-hdpi/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-hdpi/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-hdpi/icon.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-mdpi/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-mdpi/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-mdpi/icon2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-mdpi/icon2x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xhdpi/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xhdpi/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xhdpi/icon3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xhdpi/icon3x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxhdpi/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxhdpi/icon3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxhdpi/icon3x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/byk.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/icon3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/app/src/main/res/mipmap-xxxhdpi/icon3x.png -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #000000 5 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | mobile 3 | 4 | -------------------------------------------------------------------------------- /packages/mobile/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /packages/mobile/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /packages/mobile/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /packages/mobile/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'mobile' 2 | include ':app' 3 | include ':react-native-permissions' 4 | project(':react-native-permissions').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-permissions/android') 5 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 6 | include ':react-native-camera' 7 | project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') -------------------------------------------------------------------------------- /packages/mobile/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mobile", 3 | "displayName": "mobile" 4 | } -------------------------------------------------------------------------------- /packages/mobile/assets/fonts/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/fonts/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /packages/mobile/assets/fonts/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/fonts/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /packages/mobile/assets/fonts/Montserrat-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/fonts/Montserrat-SemiBold.ttf -------------------------------------------------------------------------------- /packages/mobile/assets/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/5.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/back_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/back_arrow.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/back_arrow2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/back_arrow2.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/h.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/heart.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/heart.JPG -------------------------------------------------------------------------------- /packages/mobile/assets/img/j1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/j1.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/j2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/j2.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/j3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/j3.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/j4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/j4.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/play — kopia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/play — kopia.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/play.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/play_brown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/play_brown.png -------------------------------------------------------------------------------- /packages/mobile/assets/img/player.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/player.jpg -------------------------------------------------------------------------------- /packages/mobile/assets/img/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/assets/img/player.png -------------------------------------------------------------------------------- /packages/mobile/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /packages/mobile/envs_clone/development.json: -------------------------------------------------------------------------------- 1 | { 2 | "API_URL": "http://localhost:3300", 3 | "GOOGLE_KEY":"" 4 | } -------------------------------------------------------------------------------- /packages/mobile/envs_clone/production.json: -------------------------------------------------------------------------------- 1 | { 2 | "API_URL": "http://localhost:3300", 3 | "GOOGLE_KEY":"" 4 | } -------------------------------------------------------------------------------- /packages/mobile/envs_clone/staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "API_URL": "http://localhost:3300", 3 | "GOOGLE_KEY":"" 4 | } -------------------------------------------------------------------------------- /packages/mobile/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import {AppRegistry} from 'react-native'; 6 | import App from './App'; 7 | import {name as appName} from './app.json'; 8 | import {axiosInit} from './src/config/axios/axiosInit'; 9 | 10 | axiosInit(); 11 | AppRegistry.registerComponent(appName, () => App); 12 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, strong) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_magnifier.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/Image.imageset/ic_magnifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/Image.imageset/ic_magnifier.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "arrow.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/arrow.imageset/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/arrow.imageset/arrow.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/back_arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "back_arrow.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/back_arrow.imageset/back_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/back_arrow.imageset/back_arrow.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/byk.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "byk.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/byk.imageset/byk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/byk.imageset/byk.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/email.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "email.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/email.imageset/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/email.imageset/email.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/eye.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "eye.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/eye.imageset/eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/eye.imageset/eye.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/facebook.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "facebook.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/facebook.imageset/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/facebook.imageset/facebook.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/google.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "google.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/google.imageset/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/google.imageset/google.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/h.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "h.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/h.imageset/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/h.imageset/h.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_alert.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_alert.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_alert.imageset/ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_alert.imageset/ic_alert.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_arrow_down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ic_arrow_down_small.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_arrow_down.imageset/ic_arrow_down_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_arrow_down.imageset/ic_arrow_down_small.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_arrowright.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_arrowright.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_arrowright.imageset/ic_arrowright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_arrowright.imageset/ic_arrowright.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_burger.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_burger.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_burger.imageset/ic_burger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_burger.imageset/ic_burger.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_drawer.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "drawer_ic.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_drawer.imageset/drawer_ic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_drawer.imageset/drawer_ic.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_heart.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ic_heart.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_heart.imageset/ic_heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_heart.imageset/ic_heart.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_logout.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_logout.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_logout.imageset/ic_logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_logout.imageset/ic_logout.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_magnifier.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_magnifier.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_magnifier.imageset/ic_magnifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_magnifier.imageset/ic_magnifier.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ic_menu.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_menu.imageset/ic_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_menu.imageset/ic_menu.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ic_play.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_play.imageset/ic_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_play.imageset/ic_play.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_player.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "player.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_player.imageset/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_player.imageset/player.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_playlist.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_playlist.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_playlist.imageset/ic_playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_playlist.imageset/ic_playlist.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_profile.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_profile.imageset/ic_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_profile.imageset/ic_profile.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_qr.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_qr.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_qr.imageset/ic_qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_qr.imageset/ic_qr.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_search.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_search.imageset/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_search.imageset/ic_search.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_tasks.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_tasks.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_tasks.imageset/ic_tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_tasks.imageset/ic_tasks.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_team.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ic_team.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_team.imageset/ic_team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_team.imageset/ic_team.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_user.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ic_user.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/ic_user.imageset/ic_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/ic_user.imageset/ic_user.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/info.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "info.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/info.imageset/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/info.imageset/info.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/mainheader.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "mainheader.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/mainheader.imageset/mainheader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/mainheader.imageset/mainheader.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "movie1.jpg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie1.imageset/movie1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/movie1.imageset/movie1.jpg -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "movie2.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie2.imageset/movie2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/movie2.imageset/movie2.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "movie3.jpg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie3.imageset/movie3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/movie3.imageset/movie3.jpg -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "movies4.jpg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie4.imageset/movies4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/movie4.imageset/movies4.jpg -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "movie5.jpg", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/movie5.imageset/movie5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/movie5.imageset/movie5.jpg -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/password.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "password.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/password.imageset/password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/password.imageset/password.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "play.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/play.imageset/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/play.imageset/play.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "plus.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/plus.imageset/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/plus.imageset/plus.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/twitter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "twitter.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/twitter.imageset/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/twitter.imageset/twitter.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/user.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "user.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/user.imageset/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/user.imageset/user.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/x.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/Images.xcassets/x.imageset/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/packages/mobile/ios/mobile/Images.xcassets/x.imageset/x.png -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobile/mobile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/mobile/ios/mobileTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /packages/mobile/metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | const path = require('path'); 9 | 10 | const watchFolders = [ 11 | //Relative path to packages directory 12 | path.resolve(__dirname + '/../common') 13 | ]; 14 | 15 | module.exports = { 16 | transformer: { 17 | getTransformOptions: async () => ({ 18 | transform: { 19 | experimentalImportSupport: false, 20 | inlineRequires: false, 21 | }, 22 | }), 23 | }, 24 | watchFolders 25 | }; 26 | -------------------------------------------------------------------------------- /packages/mobile/react-native.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | project: { 3 | ios: {}, 4 | android: {}, // grouped into "project" 5 | }, 6 | assets: ["./assets/fonts/"], // stays the same 7 | }; -------------------------------------------------------------------------------- /packages/mobile/scripts/set-environment.js: -------------------------------------------------------------------------------- 1 | #!/bin/node 2 | const fs = require("fs"); 3 | //Obtain the environment string passed to the node script 4 | const environment = process.argv[2] 5 | //read the content of the json file 6 | const envFileContent = require(`../envs/${environment}.json`); 7 | //copy the json inside the env.json file 8 | fs.writeFileSync("env.json", JSON.stringify(envFileContent, undefined, 2)); -------------------------------------------------------------------------------- /packages/mobile/src/config/axios/axiosInit.tsx: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import AsyncStorage from '@react-native-community/async-storage'; 3 | 4 | import AxiosInstance from '@project/common/features/config/axios/configAxios'; 5 | import Global from "../../features/common/models/Global"; 6 | 7 | export async function axiosInit() { 8 | AxiosInstance.defaults.baseURL = Global.env.API_URL; 9 | AxiosInstance.interceptors.request.use((request)=> { 10 | return request; 11 | }) 12 | }; 13 | 14 | -------------------------------------------------------------------------------- /packages/mobile/src/config/routing/BottomNavigation/AlertIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { AlertV, AlertIc, AlertView, AlertText } from "../../../features/common/components/TabBottomNavStyle"; 3 | 4 | class AlertIcon extends React.Component { 5 | render(){ 6 | return( 7 | 8 | 9 | 10 | 2 11 | 12 | 13 | ) 14 | } 15 | } 16 | export default AlertIcon -------------------------------------------------------------------------------- /packages/mobile/src/config/routing/DrawerNav/ButtonDrawer.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NavigationName } from '../NavigationName'; 3 | import { useNavigation } from '@react-navigation/native'; 4 | import { Wrapper, ButtonDraw, IcDraw, TextButton } from './DrawerStyle'; 5 | 6 | 7 | interface ButtonDrawerP { 8 | text: string, 9 | goto: NavigationName, 10 | icon: string, 11 | navigation: any 12 | } 13 | 14 | const ButtonDrawer = (props:ButtonDrawerP) =>{ 15 | const onPress = () => props.navigation.navigate(props.goto) 16 | 17 | return( 18 | 19 | 21 | 22 | { props.text} 23 | 24 | 25 | 26 | ); 27 | } 28 | 29 | export default ButtonDrawer; -------------------------------------------------------------------------------- /packages/mobile/src/config/routing/DrawerNavigation.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NavigationContainer } from '@react-navigation/native'; 3 | import { NavigationName } from './NavigationName'; 4 | import { createDrawerNavigator } from '@react-navigation/drawer'; 5 | import DrawerContent from './DrawerNav/DrawerContentScreen'; 6 | import AuthorizationNavigation from './AuthorizationNavigation'; 7 | 8 | const Drawer = createDrawerNavigator(); 9 | 10 | const DrawerNavigation = () => ( 11 | 12 | }> 13 | 14 | 15 | 16 | 17 | ) 18 | 19 | export default DrawerNavigation -------------------------------------------------------------------------------- /packages/mobile/src/config/routing/NavigationName.ts: -------------------------------------------------------------------------------- 1 | export enum NavigationName { 2 | LOADING = 'Loading', 3 | HOME = 'Home', 4 | MOVIELIST = 'MovieList', 5 | SINGLEMOVIE = 'SingleMovie', 6 | SIGNINSCREEN = 'SigInScreen', 7 | VIDEOPLAYER = 'VideoPlayer', 8 | LOGIN ='LogIn', 9 | SINGUP = 'SignUpScreen', 10 | FILTERWITHLIST = 'FilterWithList', 11 | QRSCANER = 'ScanScreen', 12 | 13 | MENU = 'Menu', 14 | TEAMS = 'Teams', 15 | TASKS = 'Tasks', 16 | PLAYLIST = 'Playlist', 17 | ALERT = 'Alerts', 18 | SEARCH = 'Search', 19 | 20 | SINGLEMOVIEDESCRIPTION = 'SingleMovieDescription', 21 | FILTERSSCREEN = 'FiltersScreen', 22 | MAINSCREENHEADER = 'MainScreenHeader', 23 | SQUAREOFMOVIE = 'SquareToRenderTemp', 24 | SHORTCUTTOFILTERS = 'ShortcutToFilters', 25 | } 26 | 27 | -------------------------------------------------------------------------------- /packages/mobile/src/config/routing/ParamList.ts: -------------------------------------------------------------------------------- 1 | import { StackNavigationProp } from "@react-navigation/stack"; 2 | import { RouteProp } from "@react-navigation/native"; 3 | import { NavigationName } from './NavigationName'; 4 | 5 | export type ParamList = { 6 | [name in NavigationName]:undefined 7 | }; 8 | 9 | export type NavProps = { 10 | navigation: StackNavigationProp; 11 | route: RouteProp; 12 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/action/LoginSubmit.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Alert } from 'react-native' 3 | 4 | const handleFormikSubmit = (values: any, actions: any) =>{ 5 | Alert.alert(JSON.stringify(values)); 6 | setTimeout(() => { 7 | actions.setSubmitting(false); 8 | }, 1000); 9 | }; 10 | export default handleFormikSubmit; 11 | 12 | -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/action/PostUser.tsx: -------------------------------------------------------------------------------- 1 | import {signUp} from '@project/common/features/auth/connectors' 2 | 3 | const postUser = async (user: {email: any; password: any, name:any}) => { 4 | return signUp(user); 5 | }; 6 | 7 | export default postUser; 8 | -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/action/handleRegistrationAlert.tsx: -------------------------------------------------------------------------------- 1 | import {ToastAndroid, Platform, Alert} from 'react-native'; 2 | 3 | const handleREgistrationAlert = (system: string, title: string) => { 4 | Platform.OS === system 5 | ? Alert.alert(title) 6 | : ToastAndroid.showWithGravity( 7 | title, 8 | ToastAndroid.LONG, 9 | ToastAndroid.CENTER, 10 | ); 11 | }; 12 | 13 | export default handleREgistrationAlert; 14 | -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/action/validationSchema.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as yup from 'yup'; 3 | 4 | const validationSchema = yup.object().shape({ 5 | email: yup 6 | .string() 7 | .label('Email') 8 | .email() 9 | .required(), 10 | password: yup 11 | .string() 12 | .label("Password") 13 | .required().min(8, 'Password is to short, min 8 characters') 14 | .max(20, 'Password should have max 20 characters') 15 | }); 16 | 17 | export default validationSchema; -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/action/validationSchemaRegistration.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as yup from 'yup'; 3 | 4 | const validationSchemaReg = yup.object().shape({ 5 | email: yup 6 | .string() 7 | .email('Podaj poprawny email') 8 | .required('Żeby się zarejestrować musisz podać email') 9 | .max(255), 10 | password: yup 11 | .string() 12 | .required('Żeby się zarejestrować musisz podać hasło') 13 | .min(8, 'za krótkie hasło') 14 | .max(255), 15 | passwordConfirmation: yup 16 | .string() 17 | .required('Żeby się zarejestrować musisz podać hasło') 18 | .min(8, 'za krótkie hasło') 19 | .max(255) 20 | .oneOf([yup.ref('password'), null], 'hasła muszą być takie same'), 21 | }); 22 | 23 | export default validationSchemaReg; 24 | -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/components/SignIn/ErrorEnum.ts: -------------------------------------------------------------------------------- 1 | export enum ErrorSingin { 2 | LOGINERROR = 'Niepoprawne dane logowania', 3 | NOCONNECT = 'Błąd połączenia', 4 | APPERROR = 'Błąd aplikacja' 5 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/auth/components/SignIn/SignInHeader.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from 'styled-components/native'; 3 | 4 | const Wrapper = styled.View` 5 | marginLeft: 30px; 6 | margin-top: 100px; 7 | margin-bottom: 1px; 8 | `; 9 | const Title = styled.Text` 10 | font-size: 26px; 11 | `; 12 | 13 | export interface HeaderProps { 14 | title: string; 15 | } 16 | 17 | const SignInHeader: React.FC = props => { 18 | return ( 19 | 20 | {props.title} 21 | 22 | ); 23 | }; 24 | 25 | export default SignInHeader; -------------------------------------------------------------------------------- /packages/mobile/src/features/common/actions/PostUser.tsx: -------------------------------------------------------------------------------- 1 | import {signUp} from '@project/common/features/auth/connectors'; 2 | 3 | const postUser = async (user: {email: string; password: string}) => { 4 | return signUp(user); 5 | }; 6 | 7 | export default postUser; 8 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/actions/handleRegistrationAlert.tsx: -------------------------------------------------------------------------------- 1 | import {ToastAndroid, Platform, Alert} from 'react-native'; 2 | 3 | const handleREgistrationAlert = (system: string, title: string) => { 4 | Platform.OS === system 5 | ? Alert.alert(title) 6 | : ToastAndroid.showWithGravity( 7 | title, 8 | ToastAndroid.LONG, 9 | ToastAndroid.CENTER, 10 | ); 11 | }; 12 | 13 | export default handleREgistrationAlert; 14 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/actions/validationSchema.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as yup from 'yup'; 3 | 4 | const validationSchemaReg = yup.object().shape({ 5 | email: yup 6 | .string() 7 | .email('Podaj poprawny email') 8 | .required('Żeby się zarejestrować musisz podać email') 9 | .max(255), 10 | password: yup 11 | .string() 12 | .required('Żeby się zarejestrować musisz podać hasło') 13 | .min(8, 'za krótkie hasło') 14 | .max(255), 15 | passwordConfirmation: yup 16 | .string() 17 | .required('Żeby się zarejestrować musisz podać hasło') 18 | .min(8, 'za krótkie hasło') 19 | .max(255) 20 | .oneOf([yup.ref('password'), null], 'hasła muszą być takie same'), 21 | }); 22 | 23 | export default validationSchemaReg; 24 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/components/Button.tsx: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {StyleSheet, Text, TouchableOpacity} from 'react-native'; 3 | 4 | interface Props { 5 | color:string, 6 | title:string, 7 | onPress:()=>void 8 | } 9 | 10 | export default class Btn extends Component { 11 | render() { 12 | return ( 13 | 14 | {this.props.title || "Button"} 15 | 16 | ); 17 | } 18 | } 19 | 20 | const s = StyleSheet.create({ 21 | button: { 22 | alignItems: 'center', 23 | padding: 10 24 | } 25 | }); -------------------------------------------------------------------------------- /packages/mobile/src/features/common/components/Error.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from 'styled-components/native'; 3 | import {View, Text} from 'react-native'; 4 | 5 | const ErrorTxt = styled.Text` 6 | color: red; 7 | `; 8 | 9 | export interface ErrorProps { 10 | inputError: string | undefined; 11 | } 12 | 13 | const Error: React.SFC = ({inputError}) => { 14 | return ( 15 | 16 | {inputError} 17 | 18 | ); 19 | }; 20 | 21 | export default Error; 22 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import styled from 'styled-components/native'; 3 | import {View, Text} from 'react-native'; 4 | import { MyText } from '../styles/MyText'; 5 | 6 | const Title = styled(MyText)` 7 | font-size: 26px; 8 | `; 9 | 10 | export interface HeaderProps { 11 | title: string; 12 | } 13 | 14 | const Header: React.SFC = props => { 15 | return ( 16 | 17 | {props.title} 18 | 19 | ); 20 | }; 21 | 22 | export default Header; 23 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/models/Global.tsx: -------------------------------------------------------------------------------- 1 | import * as env from '../../../../env.json'; 2 | 3 | class Global { 4 | env = env 5 | } 6 | 7 | 8 | export default new Global(); -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/MyText.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | import { FontFamily } from './constans/FontFamily'; 3 | 4 | 5 | export const MyText = styled.Text({ 6 | fontFamily: FontFamily.GLOBAL_MONT 7 | }) 8 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/Color.ts: -------------------------------------------------------------------------------- 1 | export enum Color { 2 | PALE_GREY = '#eef0f8', 3 | DARK_GREY = '#707070', 4 | DARK_BROWN = '#34241a', 5 | DARKGREY = '#363535', 6 | DARKGREYX = '#A7A6AB', 7 | LIGHTGREY = '#F0F2FA', 8 | LIGHTGREYX = '#00000029', 9 | LIGHTGREYXX = '#D9DAE6', 10 | GREY = '#474444', 11 | WHITE = '#ffffff', 12 | WHITEX = '#00000005', 13 | PURPLE = 'purple', 14 | DARKPURPLE = '#4f1035ec', 15 | BLACK = 'black', 16 | LIGHT_PURPLE = "#a08ef4", 17 | RED = '#ff0000' 18 | 19 | } 20 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/DifrentEnum.ts: -------------------------------------------------------------------------------- 1 | export enum DifrentSlaider { 2 | WIDTHLARGE = 359, 3 | WIDTHNORMAL = 172, 4 | WIDTHSMALL = 81 5 | } 6 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/FontFamily.ts: -------------------------------------------------------------------------------- 1 | export enum FontFamily { 2 | ARIAL = "Arial", 3 | SFPRO = "SFProDisplay", 4 | GLOBAL_MONT = "Montserrat" 5 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/FontSize.ts: -------------------------------------------------------------------------------- 1 | export enum FontSize { 2 | VERYSMALL = '12px', 3 | SMALLXS='6px', 4 | SMALLXXS='7px', 5 | SMALL = '8px', 6 | SMALLS = '9px', 7 | SMALLX = '10px', 8 | SMALLXX = '11px', 9 | NORMALXS = '12px', 10 | NORMAL = '14px', 11 | MIDIUMXS = '15px', 12 | MIDIUM = '16px', 13 | MIDPLUS = '18px', 14 | GRANDEMIDIUM= '20px', 15 | BIGXS = '23px', 16 | BIG = '25px', 17 | VERY_BIG = '26px', 18 | LARGE = '42px', 19 | } 20 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/FontWeight.ts: -------------------------------------------------------------------------------- 1 | export enum FontWeight { 2 | REGULAR = "400", 3 | SEMIBOLD = "600", 4 | BOLD = "700", 5 | LIGHT = "300", 6 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/common/styles/constans/ShadowStyle.tsx: -------------------------------------------------------------------------------- 1 | import { Platform } from "react-native"; 2 | 3 | export const getShadowStyle = ( elevation: number, shadowColor:string , shadowOpacity:number ,forStyledComponent: boolean = true, offset:number = 1,) => { 4 | if (Platform.OS === "ios") 5 | return { 6 | shadowColor: shadowColor, 7 | shadowOffset: forStyledComponent ? 0 : {offset: offset, height: offset}, 8 | shadowOpacity: shadowOpacity.toString(), 9 | shadowRadius: elevation, 10 | }; 11 | else 12 | return { 13 | elevation: elevation.toString(), 14 | }; 15 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/common/types/InputTypes.tsx: -------------------------------------------------------------------------------- 1 | export enum InputTypes { 2 | EMAIL = 'email', 3 | PASSWORD = 'password', 4 | NAME = 'name' 5 | } 6 | -------------------------------------------------------------------------------- /packages/mobile/src/features/common/types/types.tsx: -------------------------------------------------------------------------------- 1 | export type user = { 2 | email: string; 3 | password: string; 4 | name: string; 5 | }; 6 | 7 | export type returnKyeType = 8 | | 'none' 9 | | 'done' 10 | | 'search' 11 | | 'default' 12 | | 'go' 13 | | 'next' 14 | | 'send' 15 | | 'previous' 16 | | 'google' 17 | | 'join' 18 | | 'route' 19 | | 'yahoo' 20 | | 'emergency-call'; 21 | -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationAction.tsx: -------------------------------------------------------------------------------- 1 | import { ContextType } from "./context/ContextType" 2 | 3 | export const setToken = (fToken) => { 4 | return { 5 | type: ContextType.SET_TOKEN, 6 | payload : { 7 | fireBaseToken : fToken 8 | } 9 | } 10 | } 11 | 12 | export const addMesage = (remoteMessage) => { 13 | return { 14 | type : ContextType.ADD_MSG, 15 | payload : { 16 | notificationType : remoteMessage.data?.type, 17 | data : JSON.parse(remoteMessage.data?.data) 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationEnum.tsx: -------------------------------------------------------------------------------- 1 | export enum NotificatonType { 2 | NEW_VIDEO = 'newVideo', 3 | NEW_PLAYLIST = 'newPlaylist' 4 | } 5 | -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationHooks.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext, useEffect } from "react"; 2 | import { NotyficationContext } from "./NotificationsStore"; 3 | import messaging from '@react-native-firebase/messaging'; 4 | import { setToken, addMesage } from "./NotificationAction"; 5 | 6 | export const useNotificationAction = () => { 7 | const {state, dispatch} = useContext(NotyficationContext) 8 | 9 | useEffect(() => { 10 | messaging().getToken().then(fcmToken => { 11 | dispatch(setToken(fcmToken)) 12 | }); 13 | 14 | messaging().setBackgroundMessageHandler(async (remoteMessage:any) => { 15 | dispatch(addMesage(remoteMessage)) 16 | } 17 | ); 18 | 19 | }, []); 20 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationStoreProvider.tsx: -------------------------------------------------------------------------------- 1 | import React, { useReducer } from "react" 2 | import { notificationReducer } from "./context/NotificationReducer" 3 | import { initialState, NotyficationContext } from "./NotificationsStore" 4 | 5 | export const NotificationStoreProvider = (props) => { 6 | const [state, dispatch ] = useReducer(notificationReducer, initialState) 7 | return ( 8 | 9 | {props.children} 10 | 11 | ) 12 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationType.ts: -------------------------------------------------------------------------------- 1 | 2 | export type DataNotifi = { 3 | id? : string, 4 | } 5 | -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/NotificationsStore.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { DataNotifi } from "./NotificationType"; 3 | 4 | interface NotyficationContextType { 5 | type : string, 6 | data : DataNotifi, 7 | token : string 8 | } 9 | 10 | export const initialState : NotyficationContextType = { 11 | type: '', 12 | data:{ 13 | id:'' 14 | }, 15 | token : '' 16 | } 17 | 18 | export const NotyficationContext = React.createContext ({ 19 | state: initialState, 20 | dispatch:(action)=>{} 21 | }); 22 | 23 | 24 | -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/context/ContextType.ts: -------------------------------------------------------------------------------- 1 | export enum ContextType { 2 | ADD_MSG = 'Add message', 3 | SET_TOKEN = 'fcmToken' 4 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/notifications/context/NotificationReducer.tsx: -------------------------------------------------------------------------------- 1 | import { ContextType } from "./ContextType" 2 | 3 | export const notificationReducer = (state, action) => { 4 | switch (action.type) { 5 | case ContextType.ADD_MSG : 6 | return { 7 | ...state, 8 | notificationType : action.payload.notificationType, 9 | data : action.payload.data 10 | } 11 | } 12 | return state 13 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videoPlayer/commponents/YouTubePlayer.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Platform } from "react-native"; 3 | import YouTube from "react-native-youtube"; 4 | import { IPlayer } from "../models/IPlayer"; 5 | import Global from '../../common/models/Global'; 6 | 7 | 8 | export const YouTubePlayer = (props:IPlayer) =>{ 9 | 10 | const height = (Platform.OS == 'ios')? "100%" : 0; 11 | 12 | return ( 13 | 25 | ) 26 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videoPlayer/models/IPlayer.ts: -------------------------------------------------------------------------------- 1 | export interface IPlayer { 2 | onChangeFullscreen:()=>void, 3 | onError:()=>void, 4 | videoAccess:string 5 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videoPlayer/models/PlayerType.ts: -------------------------------------------------------------------------------- 1 | export enum PlayerType { 2 | YOUTUBE = 'YOUTUBE', 3 | SERVER_STREAM = 'SERVER_STREAM' 4 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/action/InputTypes.tsx: -------------------------------------------------------------------------------- 1 | export enum InputTypes { 2 | EMAIL = 'email', 3 | PASSWORD = 'password', 4 | } 5 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/action/conector.ts: -------------------------------------------------------------------------------- 1 | import { DATA, IMAGES } from './ExampleData'; 2 | 3 | export function GetVideosList() { 4 | return DATA 5 | } 6 | 7 | export function GetVideosListExpandedV() { 8 | return IMAGES 9 | } 10 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/FiltersScreen/XButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styled from 'styled-components/native'; 3 | import { Color } from '../../../common/styles/constans/Color'; 4 | 5 | const Wrapper = styled.TouchableOpacity({ 6 | backgroundColor: Color.WHITE, 7 | }); 8 | 9 | const ImageX = styled.Image` 10 | height: 30px; 11 | width: 30px; 12 | `; 13 | 14 | 15 | interface XButtonProps { 16 | navigation: any, 17 | goto: any, 18 | } 19 | 20 | export default class XBuutton extends React.Component { 21 | render(){ 22 | return( 23 | this.props.navigation.navigate(this.props.goto)}> 24 | 27 | 28 | 29 | ); 30 | } 31 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/Movies/HeaderLeft.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { TouchableOpacity } from 'react-native-gesture-handler' 3 | import { useNavigation, DrawerActions } from '@react-navigation/native' 4 | import { Hamburger } from './MovieListStyle' 5 | 6 | export const HeaderLeft =(props)=>{ 7 | const nav = useNavigation(); 8 | const drawOpen = () => nav.dispatch(DrawerActions.openDrawer()) 9 | 10 | return( 11 | 12 | 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/Movies/HeaderRight.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { TouchableOpacity} from 'react-native-gesture-handler'; 3 | import { Search } from './MovieListStyle' 4 | 5 | export class HeaderRight extends React.Component{ 6 | 7 | render(){ 8 | return( 9 | 10 | 11 | 12 | ) 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/Movies/HeaderTitle.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { TouchableOpacity} from 'react-native-gesture-handler'; 3 | import { FilterList, Arrow } from './MovieListStyle' 4 | 5 | export class HeaderTitle extends React.Component{ 6 | 7 | render(){ 8 | return( 9 | 10 | 11 | Movies in Bengaluru 12 | 13 | 14 | 15 | ) 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/Movies/ImageUtils.ts: -------------------------------------------------------------------------------- 1 | import Global from "../../../../features/common/models/Global"; 2 | 3 | export class ImageUtil { 4 | static getImageFromServer(imageName:string){ 5 | return Global.env.API_URL + '/files/' + 's1920-' + (imageName || '') 6 | } 7 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/QrScaner/QrService.tsx: -------------------------------------------------------------------------------- 1 | import queryString from 'query-string'; 2 | 3 | export const getYoutubeId = (url:string) =>{ 4 | const checkValue = url.includes('youtube.com') 5 | if(checkValue){ 6 | const searchQuestionMark = url.lastIndexOf('?') 7 | const findObj = url.substring(searchQuestionMark,url.length) 8 | const parsed = queryString.parse(findObj); 9 | return parsed.v 10 | } else{ 11 | return null; 12 | } 13 | } 14 | 15 | -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/SingleScreen/HeaderLeftSingle.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import {BackButton, BackArrowImage} from './SingleMovieStyle2'; 3 | import { NavigationName } from '../../../../config/routing/NavigationName'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | 6 | const HeaderLeftSingle = () => { 7 | const navigation = useNavigation(); 8 | const navToHome = () => navigation.goBack(); 9 | 10 | return ( 11 | 12 | 13 | 14 | ); 15 | } 16 | export default HeaderLeftSingle -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/components/SingleScreen/MoviesType.tsx: -------------------------------------------------------------------------------- 1 | export type MoviesListSimpleType = { 2 | id: string, 3 | uri: string 4 | } 5 | 6 | export type MoviesListExpandedType = { 7 | id: string, 8 | uri: string, 9 | title: string, 10 | like: string 11 | } 12 | 13 | export type MovieDescript = { 14 | id: string, 15 | name: string, 16 | kind: string, 17 | runtime: string, 18 | uri?:string 19 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/page/Alert.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | 5 | export class Alert extends React.Component { 6 | 7 | render(){ 8 | return( 9 | 10 | Alert 11 | 12 | ) 13 | } 14 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/page/Tasks.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | 5 | export class Tasks extends React.Component { 6 | 7 | render(){ 8 | return( 9 | 10 | TasksScreen 11 | 12 | ) 13 | } 14 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/page/TeamsScreen.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | 5 | export class TeamsScreen extends React.Component { 6 | 7 | render(){ 8 | return( 9 | 10 | TeamsScreen 11 | 12 | ) 13 | } 14 | } -------------------------------------------------------------------------------- /packages/mobile/src/features/videos/page/Temp.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import MainDescription from '../components/SingleScreen/MainDescription'; 3 | 4 | interface TempP { 5 | navigation: any 6 | } 7 | 8 | export default class Temp extends React.Component { 9 | 10 | render() { 11 | return ( 12 | 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/mobile/src/variables/FontSize.ts: -------------------------------------------------------------------------------- 1 | export enum FontSize { 2 | VERYSMALL = 12, 3 | SMALL = 8, 4 | NORMAL = 14, 5 | MIDIUM = 16, 6 | MIDPLUS = 18, 7 | GRANDEMIDIUM=20, 8 | RATIO = 25, 9 | DESCRIPTION = 26, 10 | VERY_BIG = 42, 11 | } -------------------------------------------------------------------------------- /packages/mobile/src/variables/TokenHooks.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useCallback } from 'react'; 2 | import AsyncStorage from '@react-native-community/async-storage'; 3 | 4 | export const useToken = () => { 5 | 6 | const [token, setToken ] = useState('') 7 | 8 | const getToken = useCallback(async() => { 9 | let isCancelled = false; 10 | try{ 11 | const token = await AsyncStorage.getItem('token') 12 | if(!isCancelled){ 13 | setToken(token) 14 | } 15 | } catch (err) { 16 | return err 17 | } 18 | return () => { 19 | isCancelled = true; 20 | } 21 | },[]); 22 | return { 23 | getToken, 24 | }; 25 | } -------------------------------------------------------------------------------- /packages/mobile/src/variables/VideosHooks.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useCallback } from 'react'; 2 | import * as AuthConnectors from '@project/common/features/videos/connector' 3 | import { IVideosRespons } from '@project/common/features/videos/models'; 4 | 5 | 6 | export const useVideos = () =>{ 7 | const [videos, setVideos] = useState>([]) 8 | const getVideos = useCallback(async() => { 9 | let isCancelled = false; 10 | (async ()=>{ 11 | try{ 12 | const response = await AuthConnectors.getVideos(); 13 | if(!isCancelled){ 14 | setVideos(response.data) 15 | } 16 | } catch (err) { 17 | return err 18 | } 19 | })(); 20 | return () => { 21 | isCancelled = true; 22 | } 23 | },[]); 24 | return { 25 | getVideos, 26 | videos 27 | }; 28 | } -------------------------------------------------------------------------------- /readmeasset/adam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/adam.png -------------------------------------------------------------------------------- /readmeasset/app_store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/app_store.png -------------------------------------------------------------------------------- /readmeasset/beata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/beata.png -------------------------------------------------------------------------------- /readmeasset/black_google_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/black_google_play.png -------------------------------------------------------------------------------- /readmeasset/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/check.png -------------------------------------------------------------------------------- /readmeasset/google_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/google_play.png -------------------------------------------------------------------------------- /readmeasset/justyna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/justyna.png -------------------------------------------------------------------------------- /readmeasset/michal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/michal.png -------------------------------------------------------------------------------- /readmeasset/mikolaj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devLeaders/CodeTutorials/9559b036f127e3a4f31c7a3b3137f07257b3038f/readmeasset/mikolaj.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "esnext", 4 | "moduleResolution": "node", 5 | "declaration": true, 6 | "noImplicitAny": false, 7 | "removeComments": true, 8 | "noLib": false, 9 | "noEmit": true, 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "esModuleInterop": true, 13 | "target": "esnext", 14 | "sourceMap": true, 15 | "jsx": "react", 16 | "skipLibCheck": true, 17 | // "strict": true, 18 | "lib": [ 19 | "es6" 20 | ] 21 | }, 22 | "exclude": [ 23 | "node_modules", 24 | "**/*.spec.ts", 25 | "AppData" 26 | ] 27 | } --------------------------------------------------------------------------------