Advertisement
kwasinski

Ionic Example

Aug 12th, 2019
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. * PS: Code uploaded for portfolio example
  3. * These code snippets came from three different files and were put here just as example.
  4. */
  5.  
  6. // app.js
  7. var app = angular.module('OiComunicados', ['ionic', 'OiComunicados.services', 'OiComunicados.controllers']);
  8.  
  9. app.run(['$http', '$ionicLoading', '$ionicPlatform', '$ionicPopup', 'DB', function($http, $ionicLoading, $ionicPlatform, $ionicPopup, DB) {
  10.     $ionicPlatform.ready(function() {
  11.  
  12.         DB.init();
  13.  
  14.         /**
  15.          * Push Setup
  16.          */
  17.         var push = PushNotification.init({
  18.             android: {},
  19.             browser: {
  20.                 pushService: 'https://fcm.googleapis.com/fcm/send'
  21.             },
  22.             ios: {
  23.                 alert: 'true',
  24.                 badge: 'true',
  25.                 sound: 'true'
  26.             },
  27.             windows: {}
  28.         });
  29.  
  30.         push.on('registration', function (data) {
  31.             var userEmail = localStorage.getItem('user-email');
  32.  
  33.             $http({
  34.                 method: 'POST',
  35.                 url: window.G.WS_URL + '/register/push',
  36.                 headers: {
  37.                     'user-email': userEmail,
  38.                 },
  39.                 data: {
  40.                     email: userEmail,
  41.                     token: data.registrationId
  42.                 }
  43.             })
  44.             .then(
  45.                 response => { console.log(response); },
  46.                 error    => { console.log('error registering device token'); })
  47.  
  48.         });
  49.  
  50.         push.on('error', function (err) {
  51.             console.log('Error: ' + err.message);
  52.         });
  53.  
  54.         // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
  55.         // for form inputs)
  56.         if (window.cordova && window.cordova.plugins.Keyboard) {
  57.             cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
  58.             cordova.plugins.Keyboard.disableScroll(true);
  59.             cordova.plugins.Keyboard.shrinkView(false);
  60.         }
  61.         if (window.StatusBar) {
  62.             // org.apache.cordova.statusbar required
  63.             StatusBar.styleDefault();
  64.         }
  65.     });
  66. }]);
  67.  
  68.  
  69.  
  70. app.config(['$httpProvider', function ($httpProvider) {
  71.     $httpProvider.defaults.useXDomain = false;
  72.     delete $httpProvider.defaults.headers.common['X-Requested-With'];
  73.     $httpProvider.defaults.headers.common['user-email'] = G.USER_EMAIL;
  74.     $httpProvider.defaults.headers.common['user-token'] = G.USER_TOKEN;
  75.  
  76. }]);
  77.  
  78. app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  79.     $stateProvider
  80.  
  81.     /*
  82.     * Absctract state for login screen
  83.     */
  84.     .state('loginStage', {
  85.         url: '/',
  86.         abstract: true,
  87.         templateUrl: 'templates/loginStage.html',
  88.         controller: 'MainController',
  89.     })
  90.  
  91.     .state('loginStage.login', {
  92.         url: 'login/',
  93.         views: {
  94.             'mainContent': {
  95.                 templateUrl: 'templates/login.html',
  96.                 controller: 'LoginController',
  97.             },
  98.         }
  99.     })
  100.  
  101.     .state('loginStage.tuto', {
  102.         url: 'tuto/',
  103.         views: {
  104.             'mainContent': {
  105.                 templateUrl: 'templates/tutorial.html',
  106.                 controller: 'TutorialController',
  107.             },
  108.         }
  109.     })
  110.  
  111.     .state('app', {
  112.         url: '/app',
  113.         abstract: true,
  114.         templateUrl: 'templates/main.html',
  115.         controller: 'MainController',
  116.     })
  117.  
  118.     /*
  119.     * Comunicados list Screen
  120.     */
  121.     .state('app.home', {
  122.         url: '/home/',
  123.         cache: false,
  124.         views: {
  125.             'menuNavbarContent': {
  126.                 templateUrl: 'templates/components/defaultNav.html',
  127.             },
  128.             'mainContent': {
  129.                 templateUrl: 'templates/home.html',
  130.                 controller: 'HomeController',
  131.             },
  132.             'footerContent': {
  133.                 templateUrl: null,
  134.             }
  135.         }
  136.     })
  137.  
  138.     /*
  139.     * Comunicados list Screen
  140.     */
  141.     .state('app.comunicadosList', {
  142.         url: '/comunicados/:page',
  143.         cache: false,
  144.         views: {
  145.             'menuNavbarContent': {
  146.                 templateUrl: 'templates/components/defaultNav.html',
  147.             },
  148.             'mainContent': {
  149.                 templateUrl: 'templates/comunicadosList.html',
  150.                 controller: 'ComunicadoListController',
  151.             },
  152.             'footerContent': {
  153.                 templateUrl: 'templates/components/pagination.html',
  154.                 controller: 'ComunicadoListController',
  155.             }
  156.         }
  157.     })
  158.  
  159.     /*
  160.     * Comunicados Search List Screen
  161.     */
  162.     .state('app.comunicadosListSearch', {
  163.         url: '/comunicados/search/:page',
  164.         cache: false,
  165.         params: {
  166.             'formData': null,
  167.         },
  168.         views: {
  169.             'menuNavbarContent': {
  170.                 templateUrl: 'templates/components/defaultNav.html',
  171.                 controller: 'ComunicadoListSearchController',
  172.             },
  173.             'mainContent': {
  174.                 templateUrl: 'templates/comunicadosListSearch.html',
  175.                 controller: 'ComunicadoListSearchController',
  176.  
  177.             },
  178.             'footerContent': {
  179.                 templateUrl: 'templates/components/pagination.html',
  180.                 controller: 'ComunicadoListSearchController',
  181.             }
  182.         }
  183.     })
  184.  
  185.     /*
  186.     * Comunicados list Screen
  187.     */
  188.     .state('app.comunicadosShow', {
  189.         url: '/comunicado/:comunicado_id',
  190.         views: {
  191.             'menuNavbarContent': {
  192.                 templateUrl: 'templates/components/defaultNav.html',
  193.             },
  194.             'mainContent': {
  195.                 templateUrl: 'templates/comunicadoShow.html',
  196.                 controller: 'ComunicadoShowController'
  197.             },
  198.             'footerContent': {
  199.                 templateUrl: null,
  200.             }
  201.         }
  202.     })
  203.  
  204.     .state('app.canaisList', {
  205.         url: '/canais/list/',
  206.         views: {
  207.             'menuNavbarContent': {
  208.                 templateUrl: null,
  209.             },
  210.             'mainContent': {
  211.                 templateUrl: 'templates/canaisList.html',
  212.                 controller: 'CanaisListController',
  213.             },
  214.             'footerContent': {
  215.                 templateUrl: null,
  216.             }
  217.         }
  218.     })
  219.  
  220.     .state('app.canalShow', {
  221.         url: '/comunicados/list/canal/:canal_id/page/:page',
  222.         views: {
  223.             'menuNavbarContent': {
  224.                 templateUrl: 'templates/components/defaultNav.html',
  225.             },
  226.             'mainContent': {
  227.                 templateUrl: 'templates/canaisListComunicados.html',
  228.                 controller: 'CanaisListComunicadosController',
  229.             },
  230.             'footerContent': {
  231.                 templateUrl: 'templates/components/pagination.html',
  232.             }
  233.         }
  234.     })
  235.  
  236.     .state('app.videoList', {
  237.         url: '/videos/:page',
  238.         views: {
  239.             'menuNavbarContent': {
  240.                 templateUrl: 'templates/components/defaultNav.html',
  241.             },
  242.             'mainContent': {
  243.                 templateUrl: 'templates/videosList.html',
  244.                 controller: 'VideosController',
  245.             },
  246.             'footerContent': {
  247.                 templateUrl: 'templates/components/pagination.html',
  248.                 controller: 'VideosController',
  249.             }
  250.         }
  251.     })
  252.  
  253.     .state('app.videoDetail', {
  254.         url: '/video/detail/:id',
  255.         cache: false,
  256.         views: {
  257.             'menuNavbarContent': {
  258.                 templateUrl: 'templates/components/defaultNav.html',
  259.             },
  260.             'mainContent': {
  261.                 templateUrl: 'templates/videoDetail.html',
  262.                 controller: 'VideoDetailController',
  263.             },
  264.             'footerContent': {
  265.                 templateUrl: null,
  266.             }
  267.         }
  268.     })
  269.  
  270.     .state('app.DocumentList', {
  271.         url: '/documents/:page',
  272.         views: {
  273.             'menuNavbarContent': {
  274.                 templateUrl: 'templates/components/defaultNav.html',
  275.             },
  276.             'mainContent': {
  277.                 templateUrl: 'templates/documentsList.html',
  278.                 controller: 'DocumentController',
  279.             },
  280.             'footerContent': {
  281.                 templateUrl: 'templates/components/pagination.html',
  282.                 controller: 'DocumentController',
  283.             }
  284.         }
  285.     })
  286.  
  287.     .state('app.privacyPolicy', {
  288.         url: '/privacypolicy',
  289.         views: {
  290.             'menuNavbarContent': {
  291.                 templateUrl: 'templates/components/defaultNav.html',
  292.             },
  293.             'mainContent': {
  294.                 templateUrl: 'templates/privacypolicy.html',
  295.             },
  296.             'footerContent': {
  297.                 templateUrl: null,
  298.             }
  299.         }
  300.     })
  301.  
  302.     // fallback url
  303.     $urlRouterProvider.otherwise('/login/');
  304. }]);
  305.  
  306.  
  307. // MainController.js
  308. angular.module('OiComunicados.controllers', []);
  309.  
  310. app.controller('MainController', function($scope, $ionicModal, $state, $log, $location, $rootScope, $http, $http, $ionicPopup, $ionicHistory, DB, User, Config, $ionicLoading)
  311. {
  312.     DB.init();
  313.  
  314.     $rootScope.page = 1;
  315.     $rootScope.csrfToken = '';
  316.  
  317.     var first_visit = localStorage.getItem('first-visit');
  318.     if (!first_visit) {
  319.         $location.url('/tuto/');
  320.     }
  321.  
  322.     // With the new view caching in Ionic, Controllers are only called
  323.     // when they are recreated or on app start, instead of every page change.
  324.     // To listen for when this page is active (for example, to refresh data),
  325.     // listen for the $ionicView.enter event:
  326.     $scope.$on('$ionicView.enter', (e) => {
  327.         var first_visit = localStorage.getItem('first-visit');
  328.  
  329.         if (!first_visit && first_visit != 0 && $state.current.name == 'loginStage.login') localStorage.setItem('first-visit', 1);
  330.  
  331.         // Verify if the user is logged in
  332.         var is_logged = localStorage.getItem('user-logged');
  333.         if (!is_logged && !first_visit == null)  $location.url('/login/')
  334.  
  335.         $rootScope.$on('$stateChangeStart', function (event, next, current) {
  336.             $rootScope.showPagination = false;
  337.         });
  338.  
  339.         // clearing search flag for result-search-title-bar
  340.         // $scope.searchResult = undefined;
  341.     });
  342.  
  343.     /**
  344.      * Modal for search modal
  345.      */
  346.     $ionicModal.fromTemplateUrl('templates/components/searchModal.html', {
  347.         scope: $scope,
  348.         animation: 'slide-in-top'
  349.     }).then((modal) => {
  350.         $scope.modal = modal;
  351.     });
  352.  
  353.     /**
  354.      * Open Search Modal
  355.      */
  356.     $scope.openSearchModal = () => {
  357.         $scope.modal.show();
  358.     };
  359.  
  360.     /**
  361.      * Close Modal
  362.      */
  363.     $scope.closeSearchModal = () => {
  364.         $scope.modal.hide();
  365.     };
  366.  
  367.     /**
  368.      * Back to previous page
  369.      */
  370.     $scope.goBack = () => {
  371.         $ionicHistory.goBack();
  372.     }
  373.  
  374.  
  375.     $scope.clearComunicados = function() {
  376.         console.log('clear');
  377.         $rootScope.searchResult = 0;
  378.         $state.go('app.comunicadosList');
  379.     }
  380.  
  381.     /*
  382.     * Search Form
  383.     */
  384.     // Form data for the search modal
  385.     {
  386.         $scope.searchData = {in_title: true};
  387.  
  388.         $scope.doSearch = () => {
  389.             $rootScope.comunicados = null;
  390.  
  391.             $scope.closeSearchModal();
  392.             $ionicLoading.show({
  393.                 noBackdrop: true,
  394.                 template: '<ion-spinner icon="lines" class="spinner-energized"></ion-spinner> <br/>'
  395.             });
  396.  
  397.             var formData = $scope.searchData;
  398.             $state.go('app.comunicadosListSearch', { page: 1, formData: formData }, {reload: true } );
  399.         }
  400.     }
  401.  
  402.     /*
  403.     * Log out button in side manu
  404.     * Clear session storage and redirects to login
  405.     */
  406.     $scope.logout = () => {
  407.         localStorage.clear();
  408.         localStorage.setItem('first-visit', 1);
  409.         User.logOff();
  410.         $location.url('/login/');
  411.     }
  412.  
  413.     // Events
  414.  
  415.     // Cleanup the modal when we're done with it!
  416.     $scope.$on('$destroy', () => {
  417.         $scope.modal.remove();
  418.     });
  419.  
  420.     // Execute action on hide modal
  421.     $scope.$on('modal.hidden', () => {
  422.         // Execute action
  423.     });
  424.  
  425.     // Execute action on remove modal
  426.     $scope.$on('modal.removed', () => {
  427.         // Execute action
  428.     });
  429.  
  430.  
  431.  
  432. });
  433.  
  434.  
  435. // LoginController.js
  436.  
  437. /*
  438. * LoginController
  439. * Handle Login screen flow
  440. */
  441. app.controller('LoginController', function($scope, $rootScope, $sanitize, $ionicPopup, $ionicModal, $injector, $location, $http, $log, $ionicLoading, User, DB)
  442. {
  443.     DB.init();
  444.     var user_token = localStorage.getItem('user-token');
  445.     $scope.email = localStorage.getItem('user-email')? localStorage.getItem('user-email'): '';
  446.  
  447.     is_logged = localStorage.getItem('user-logged');
  448.     if (is_logged) $location.url('/app/home/');
  449.  
  450.     var $callSubscribeValidation = function (email) {
  451.         $http({
  452.             method: 'POST',
  453.             url: G.WS_URL + '/login',
  454.             headers: {
  455.                 'X-CSRF-TOKEN': $rootScope.csrfToken,
  456.             },
  457.             data: {
  458.                 email: email,
  459.                 uuid: G.DEVICE.UUID,
  460.                 model: G.DEVICE.MODEL,
  461.                 serial: G.DEVICE.SERIAL,
  462.  
  463.             },
  464.         }).then(function onSuccess(response) {
  465.             $ionicLoading.hide();
  466.             if (response.data.success == false)  return;
  467.  
  468.             var data = response.data;
  469.  
  470.             // if we recognize a user witha valid token but its not sotred in the app sesssion
  471.             if (data.data.account == 'active')  {
  472.  
  473.                 User.setUser({
  474.                     user_id: data.data.id,
  475.                     user_email: data.data.email,
  476.                     user_name: data.data.name,
  477.                     user_token: data.data.token,
  478.                     user_logged: true,
  479.                 }).then(function(result) {
  480.  
  481.                 });
  482.  
  483.                 localStorage.setItem('user-id', data.data.id);
  484.                 localStorage.setItem('user-email', data.data.email);
  485.                 localStorage.setItem('user-name', data.data.name);
  486.                 localStorage.setItem('user-logged', true);
  487.                 localStorage.setItem('user-token', data.data.token);
  488.  
  489.                 // Set User Info
  490.                 G.USER_ID = data.data.id;
  491.                 G.USER_NAME = data.data.name;
  492.                 G.USER_EMAIL = data.data.email;
  493.                 G.USER_TOKEN = data.data.token;
  494.  
  495.                 // redirect
  496.                 $location.url('/app/home/');
  497.             }
  498.  
  499.             $ionicPopup.alert({
  500.                 title: 'Inscrição verificada!',
  501.                 template: data.data.message,
  502.             });
  503.  
  504.         },
  505.         error => {
  506.             localStorage.clear();
  507.             $ionicLoading.hide();
  508.  
  509.             $ionicPopup.alert({
  510.                 title: 'Atenção',
  511.                 template: error.data.message,
  512.             });
  513.  
  514.         });
  515.  
  516.     }
  517.  
  518.     var $callLoginViaToken = function (user_token) {
  519.         $http({
  520.             method: 'POST',
  521.             url: G.WS_URL + '/login/' + user_token,
  522.             headers: {
  523.                 'X-CSRF-TOKEN': $rootScope.csrfToken,
  524.             },
  525.             data: {
  526.                 uuid: G.DEVICE.UUID,
  527.                 model: G.DEVICE.MODEL,
  528.                 serial: G.DEVICE.SERIAL,
  529.             }
  530.         }).then(function onSuccess(response) {
  531.             $ionicLoading.hide();
  532.             if (response.data.success == false)  return;
  533.  
  534.             var data = response.data.data;
  535.             if (data.account === 'expired')  $callSubscribeValidation();
  536.  
  537.             User.setUser({
  538.                 user_id: data.id,
  539.                 user_email: data.email,
  540.                 user_name: data.name,
  541.                 user_token: data.token,
  542.                 user_logged: true,
  543.             }).then(function(result) {
  544.  
  545.                 User.logOn();
  546.             });
  547.  
  548.  
  549.             localStorage.setItem('user-id', data.id);
  550.             localStorage.setItem('user-email', data.email);
  551.             localStorage.setItem('user-name', data.name);
  552.             localStorage.setItem('user-logged', true);
  553.             localStorage.setItem('user-token', data.token);
  554.  
  555.             // Set User Info
  556.             G.USER_ID = data.id;
  557.             G.USER_NAME = data.name;
  558.             G.USER_EMAIL = data.email;
  559.             G.USER_EMAIL = data.token;
  560.  
  561.             // redirect
  562.             $location.url('/app/home/');
  563.  
  564.         },
  565.         error => {
  566.             localStorage.clear();
  567.             $ionicLoading.hide();
  568.             $ionicPopup.alert({
  569.                 title: 'Atenção',
  570.                 template: error.data.message,
  571.             });
  572.  
  573.         });
  574.     }
  575.  
  576.     // Triggered in the login modal to close it
  577.     $scope.closeApp = function() {
  578.         $scope.modal.hide();
  579.     };
  580.  
  581.     // Perform the login action when the user submits the login form
  582.     $scope.doLogin = function() {
  583.         var $formData = $scope.loginData,
  584.             email = $formData.email,
  585.             user_token = localStorage.getItem('user-token');
  586.  
  587.         $ionicLoading.show({noBackdrop: true,
  588.             template: '<ion-spinner icon="lines" class="spinner-energized"></ion-spinner> <br/>'
  589.         });
  590.  
  591.         // If user doesn't have the token
  592.         if (!user_token)  $callSubscribeValidation(email);
  593.         // If the user has the token
  594.         if (user_token)  $callLoginViaToken(user_token);
  595.  
  596.     };
  597.  
  598.     // Form data for the login modal
  599.     $scope.loginData = {};
  600.  
  601. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement