Untitled

By Ungracious Panda, 3 Months ago, written in Plain Text.
URL https://paste.tinyw.in/index.php/view/56202862
Download Paste or View RawExpand paste to full width of browser | Change Viewing Options
  1. template>
  2.  -  <div v-if='loginStateChecked && siteSettingsPresent' id="app">
  3.  +  <div v-if='loginStateChecked && siteSettings' id="app">
  4.         <router-view></router-view>
  5.     </div>
  6.   </template>
  7.  
  8.   <script>
  9.   import state from '@/state';
  10.  -import auth from '@/api/auth';
  11.  -import ui from '@/api/ui';
  12.  
  13.   export default {
  14.     name: 'app',
  15.     created(){
  16.       var self = this;
  17.  -
  18.       //auth.checkLoginState();
  19.  -    ui.getSiteSettings();
  20.  +    state.dispatch('ui/getSiteSettings');
  21.  
  22.       io.socket.on('SITE_UPDATE', function(msg) {
  23.         console.log('Website update triggered. Local Revision: ' + self.siteSettings.siteRevision + ' Latest: ' + msg.data.siteRevision);
  24.  @@ -29,26 +26,9 @@ export default {
  25.       });
  26.     },
  27.     computed: {
  28.  -    loggedIn: function(){
  29.  -      return state.getters.loggedIn;
  30.  -    },
  31.  -    loginStateChecked: function(){
  32.  -      return state.getters.loginStateChecked;
  33.  -    },
  34.  -    siteSettingsPresent: function(){
  35.  -      return state.getters.siteSettings != null;
  36.  -    },
  37.  -    siteSettings: function(){
  38.  -      return state.getters.siteSettings;
  39.  -    }
  40.  -  },
  41.  -  watch: {
  42.  -    loggedIn: function(value){
  43.  -      //console.log('Logged in state changed');
  44.  -
  45.  -      /*if(value == true)
  46.  -        this.$router.push('/dashboard');*/
  47.  -    }
  48.  +    loginStateChecked: () => state.getters.loginStateChecked,
  49.  +    loggedIn: () => state.getters.loggedIn,
  50.  +    siteSettings: () => state.getters['ui/siteSettings']
  51.     }
  52.   }
  53.   </script>
  54. View  
  55. 32  webpack/src/components/Dashboard/CSVConfigure.vue
  56.  @@ -110,9 +110,6 @@
  57.   </template>
  58.   <script>
  59.   import state from '@/state';
  60.  -import util from '@/util';
  61.  -import csv from '@/api/csv';
  62.  -import ui from '@/api/ui';
  63.  
  64.   export default {
  65.     name: 'csv-configure',
  66.  @@ -148,8 +145,6 @@ export default {
  67.       if (self.isDistributorFile)
  68.         return;
  69.  
  70.  -    console.log('Leaving route', self.mapped, to, from, next);
  71.  -
  72.       if (self.mapped == true)
  73.         return next();
  74.  
  75.  @@ -158,12 +153,12 @@ export default {
  76.  
  77.       console.log('Deleting unfinished file');
  78.  
  79.  -    ui.deleteFile(self, this.fileToConfigure.file_id);
  80.  +    state.dispatch('ui/deleteFile', this.fileToConfigure.file_id);
  81.  
  82.       return next();
  83.     },
  84.     methods: {
  85.  -    configureCSV() {
  86.  +    async configureCSV() {
  87.         var self = this;
  88.  
  89.         console.log('Configuring csv...');
  90.  @@ -188,9 +183,16 @@ export default {
  91.           return;
  92.         }
  93.  
  94.  -      csv.configureCSV(self, configuration);
  95.  +      try{
  96.  +        let header = await state.dispatch('ui/configureCSV', configuration);
  97.  +        this.configured = true;
  98.  +        this.header = header;
  99.  +      }catch(e){
  100.  +        this.configured = false;
  101.  +        this.error = e.toString();
  102.  +      }
  103.       },
  104.  -    mapCSV() {
  105.  +    async mapCSV() {
  106.         var self = this;
  107.  
  108.         console.log('Mapping csv...');
  109.  @@ -214,7 +216,15 @@ export default {
  110.           return;
  111.         }
  112.  
  113.  -      csv.mapCSV(self, mapData);
  114.  +      try{
  115.  +        await state.dispatch('ui/mapCSV', mapData);
  116.  +        self.mapped = true;
  117.  +        self.$router.push('/dashboard');
  118.  +      }catch(e){
  119.  +        self.canSubmit = true;
  120.  +        self.mapped = false;
  121.  +        self.error = e.toString();
  122.  +      }
  123.       }
  124.     },
  125.     data() {
  126.  @@ -246,7 +256,7 @@ export default {
  127.           };
  128.         }
  129.  
  130.  -      return state.getters.fileToConfigure;
  131.  +      return state.getters['ui/fileToConfigure'];
  132.       }
  133.     },
  134.     watch: {
  135. View  
  136. 57  webpack/src/components/Dashboard/CreateDistributorLink.vue
  137.  @@ -48,8 +48,6 @@
  138.     </div>
  139.   </template>
  140.   <script>
  141.  -import csv from '@/api/csv';
  142.  -import ui from '@/api/ui';
  143.   import state from '@/state';
  144.   import CSVConfigure from '@/components/Dashboard/CSVConfigure';
  145.   import CSVExport from '@/components/Dashboard/Export';
  146.  @@ -74,41 +72,43 @@ export default {
  147.       }
  148.     },
  149.     methods: {
  150.  -    downloadCSV: function(){
  151.  -      var self = this;
  152.  -
  153.  -      self.fetching = true;
  154.  +    async downloadCSV(){
  155.  +      this.fetching = true;
  156.  
  157.  -      csv.fetchCSVHeader(this, this.csv_url, function(result){
  158.  -        if(result.length > 0)
  159.  -          self.csv_downloaded = true;
  160.  +      try{
  161.  +        this.header = await state.dispatch('ui/fetchCSVHeader', this.csv_url);
  162.  +        this.csv_downloaded = true;
  163.  +        this.fetching = false;
  164.  
  165.  -        self.header = result;
  166.  -      });
  167.  +        if(this.header.length == 0){
  168.  +          this.error = "No CSV Headers were found in this file.";
  169.  +        }
  170.  +      }catch(e){
  171.  +        this.fetching = false;
  172.  +        this.header = [];
  173.  +        this.error = e.toString();
  174.  +      }
  175.       },
  176.       configureCSV: function(configuration){
  177.         console.log('Configuring CSV with ', configuration);
  178.         this.configuration = configuration;
  179.         this.configured = true;
  180.       },
  181.  -    mapCSV: function(map){
  182.  +    async mapCSV(map){
  183.         var self = this;
  184.  
  185.  -      //console.log('Mapping CSV with ', map);
  186.  -      //console.log(self.$refs.configureCSV.error = 'fuck');
  187.  +      try{
  188.  +        await state.dispatch('ui/validateCSVUrl', {url: self.csv_url, map: map});
  189.  
  190.  -      csv.validateCSVUrl(self.csv_url, map, function(data){
  191.  -        if(data.err != null){
  192.  -          self.$refs.configureCSV.error = data.err.toString();
  193.  -          self.$refs.configureCSV.canSubmit = true;
  194.  -        }else{
  195.  -          self.configured = true;
  196.  -          self.mapped = true;
  197.  -          self.csv_map = map;
  198.  -        }
  199.  -      });
  200.  +        self.configured = true;
  201.  +        self.mapped = true;
  202.  +        self.csv_map = map;
  203.  +      }catch(e){
  204.  +        self.$refs.configureCSV.error = e.toString();
  205.  +        self.$refs.configureCSV.canSubmit = true;
  206.  +      }
  207.       },
  208.  -    exportCSV(exportConfig){
  209.  +    async exportCSV(exportConfig){
  210.         var self = this;
  211.  
  212.         self.export_config = exportConfig;
  213.  @@ -120,9 +120,12 @@ export default {
  214.         request['csv_url'] = self.csv_url;
  215.         request['link_title'] = self.link_title;
  216.  
  217.  -      ui.createDistributorLink(request, function(){
  218.  +      try{
  219.  +        await state.dispatch('ui/createDistributorLink', request);
  220.           self.$router.push('/dashboard/distributor-link');
  221.  -      });
  222.  +      }catch(e){
  223.  +        console.log("Error creating distributor link", e);
  224.  +      }
  225.       }
  226.     },
  227.     watch: {
  228. View  
  229. 21  webpack/src/components/Dashboard/Dashboard.vue
  230.  @@ -18,26 +18,9 @@ import LoginPage from '@/components/Frontend/LoginPage';
  231.  
  232.   export default {
  233.     name: 'dashboard',
  234.  -  async created(){
  235.  -    if(this.loggedIn === false){
  236.  -      //this.$router.push('/login');
  237.  -    }
  238.  -  },
  239.     computed: {
  240.  -    loggedIn: function(){
  241.  -      return state.getters.loggedIn;
  242.  -    },
  243.  -    loginStateChecked: function(){
  244.  -      return state.getters.loginStateChecked;
  245.  -    }
  246.  -  },
  247.  -  watch: {
  248.  -    loggedIn: function(loggedIn){
  249.  -      console.log("login state ", loggedIn);
  250.  -      if(!loggedIn){
  251.  -        //this.$router.push('/');
  252.  -      }
  253.  -    }
  254.  +    loggedIn: () => state.getters.loggedIn,
  255.  +    loginStateChecked: () => state.getters.loginStateChecked
  256.     },
  257.     components: {
  258.       'main-nav': nav,
  259. View  
  260. 29  webpack/src/components/Dashboard/DistributorLink.vue
  261.  @@ -63,8 +63,14 @@ import state from '@/state';
  262.  
  263.   export default {
  264.     name: 'distributor-link',
  265.  -  created(){
  266.  -    ui.getDistributorLink(this);
  267.  +  async created(){
  268.  +    try{
  269.  +      await state.dispatch('ui/getDistributorLink');
  270.  +
  271.  +      this.loaded = true;
  272.  +    }catch(e){
  273.  +      console.log("Error retrieving distributor links...");
  274.  +    }
  275.     },
  276.     data(){
  277.       return {
  278.  @@ -74,26 +80,19 @@ export default {
  279.       }
  280.     },
  281.     methods: {
  282.  -    deleteLink(linkId){
  283.  -      ui.deleteDistributorLink(this, linkId);
  284.  +    async deleteLink(linkId){
  285.  +      await state.dispatch('ui/deleteDistributorLink', linkId);
  286.  +
  287.  +      this.$forceUpdate();
  288.       }
  289.     },
  290.     computed: {
  291.  -    distributorLink: function(){
  292.  -      return state.getters.distributorLink;
  293.  -    },
  294.  -
  295.  -    maxDistributorFiles: function(){
  296.  -      var settings = state.getters.siteSettings;
  297.  -
  298.  -      return settings.maxDistributorFiles;
  299.  -    }
  300.  +    maxDistributorFiles: () => state.getters['ui/siteSettings'].maxDistributorFiles,
  301.  +    distributorLink: () => state.getters['ui/distributorLink']
  302.     },
  303.  
  304.     watch: {
  305.       distributorLink: function(distributorLink){
  306.  -      console.log('Distributor link list changed');
  307.  -
  308.         this.linkCount = Object.keys(distributorLink).length;
  309.       }
  310.     },
  311. View  
  312. 10  webpack/src/components/Dashboard/DropzoneModal.vue
  313.  @@ -41,10 +41,14 @@ export default {
  314.         error: null
  315.       }
  316.     },
  317.  -  created() {
  318.  +  async created() {
  319.       var self = this;
  320.  
  321.  -    auth.checkLoginState();
  322.  +    try{
  323.  +      await state.dispatch('checkLoginState');
  324.  +    }catch(e){
  325.  +      return;
  326.  +    }
  327.  
  328.       $(document).ready(function() {
  329.         var dz = new Dropzone("#csv-upload", {
  330.  @@ -67,7 +71,7 @@ export default {
  331.             return;
  332.           }
  333.  
  334.  -        state.commit('setFileToConfigure', response.result);
  335.  +        state.commit('ui/fileToConfigure', response.result);
  336.           self.$emit('close');
  337.           self.$router.push('/dashboard/csv-configure');
  338.         });
  339. View  
  340. 51  webpack/src/components/Dashboard/Export.vue
  341.  @@ -57,21 +57,24 @@
  342.   </div>
  343.   </template>
  344.   <script>
  345.  +import querystring from 'querystring';
  346.   import state from '@/state';
  347.  -import csv from '@/api/csv';
  348.  -import ui from '@/api/ui';
  349.  
  350.   export default {
  351.     props: ['isDistributorFile'],
  352.  -  created() {
  353.  +  async created() {
  354.       var self = this;
  355.  
  356.  -    if(!this.isDistributorFile){
  357.  -      this.generatePreview();
  358.  -    }
  359.  +    try{
  360.  +      if(!this.isDistributorFile){
  361.  +        await state.dispatch('ui/getExportPreview', this.exportConfig);
  362.  +      }
  363.  
  364.  -    if(this.$route.params['fileId'] && !this.filePendingExport){
  365.  -      ui.getStatus(this);
  366.  +      if(this.$route.params['fileId'] && !this.filePendingExport){
  367.  +        await state.dispatch('ui/getFileStatus');
  368.  +      }
  369.  +    }catch(e){
  370.  +      return;
  371.       }
  372.  
  373.       $(document).ready(function() {
  374.  @@ -97,7 +100,8 @@ export default {
  375.           return;
  376.         }
  377.  
  378.  -      csv.exportCSV(this, this.exportConfig);
  379.  +      var downloadLink = '/api/csv/export?' + querystring.stringify(this.exportConfig);
  380.  +      window.open(downloadLink);
  381.       },
  382.       resetTimer(){
  383.         clearTimeout(this.preview_timer);
  384.  @@ -108,9 +112,10 @@ export default {
  385.           return;
  386.         }
  387.  
  388.  -      state.commit('setExportPreview', []);
  389.         this.generating_preview = true;
  390.  -      await csv.exportPreview(this.exportConfig);
  391.  +
  392.  +      await state.dispatch('ui/getExportPreview', this.exportConfig);
  393.  +
  394.         this.generating_preview = false;
  395.       }
  396.     },
  397.  @@ -126,6 +131,8 @@ export default {
  398.       }
  399.     },
  400.     computed: {
  401.  +    exportPreview: () => state.getters['ui/exportPreview'],
  402.  +    fileStatus: () => state.getters['ui/fileStatus'],
  403.       filePendingExport: function() {
  404.         if (this.isDistributorFile){
  405.           return {
  406.  @@ -141,9 +148,6 @@ export default {
  407.           return state.getters.filePendingExport;
  408.         }
  409.       },
  410.  -    fileStatus(){
  411.  -      return state.getters.fileStatus;
  412.  -    },
  413.       exportConfig(){
  414.         let fileId = null;
  415.  
  416.  @@ -170,9 +174,6 @@ export default {
  417.  
  418.         return csvData;
  419.       },
  420.  -    exportPreview(){
  421.  -      return state.getters.exportPreview;
  422.  -    },
  423.       potentialMonthlyProfit(){
  424.         if(!this.exportPreview){
  425.           return;
  426.  @@ -193,22 +194,6 @@ export default {
  427.       }
  428.     },
  429.     watch: {
  430.  -    filePendingExport: function(){
  431.  -      var self = this;
  432.  -
  433.  -      $(document).ready(function() {
  434.  -        $('#minimum-roi').slider({
  435.  -          range: false,
  436.  -          min: 5,
  437.  -          max: 200,
  438.  -          value: 30,
  439.  -          slide: function(event, ui) {
  440.  -            $(".minimum-roi-status").html(ui.value + '%');
  441.  -            self.minimum_roi = ui.value / 100;
  442.  -          }
  443.  -        });
  444.  -      });
  445.  -    },
  446.       minimum_roi(roi){
  447.         this.resetTimer();
  448.       },
  449. View  
  450. 10  webpack/src/components/Dashboard/Nav.vue
  451.  @@ -42,7 +42,6 @@
  452.   </template>
  453.   <script>
  454.   import state from '@/state';
  455.  -import auth from '@/api/auth';
  456.   import DropzoneModal from '@/components/Dashboard/DropzoneModal';
  457.  
  458.   export default {
  459.  @@ -53,8 +52,8 @@ export default {
  460.       }
  461.     },
  462.     methods: {
  463.  -    logout: function() {
  464.  -      auth.logout();
  465.  +    async logout() {
  466.  +      await state.dispatch('logout');
  467.  
  468.         this.$router.push('/');
  469.       },
  470.  @@ -63,9 +62,8 @@ export default {
  471.       }
  472.     },
  473.     computed: {
  474.  -    userData: function() {
  475.  -      return state.getters.userData;
  476.  -    },
  477.  +    userData: () => state.getters.userData,
  478.  +    
  479.       route: function(){
  480.         return this.$route;
  481.       }
  482. View  
  483. 27  webpack/src/components/Dashboard/StatusPage.vue
  484.  @@ -53,13 +53,17 @@
  485.   </template>
  486.   <script>
  487.   import state from '@/state';
  488.  -import ui from '@/api/ui';
  489.   import YesNo from '@/components/Common/Modal/YesNo';
  490.  
  491.   export default {
  492.     name: 'status-page',
  493.  -  created() {
  494.  -    ui.getStatus(this);
  495.  +  async created() {
  496.  +    try{
  497.  +      await state.dispatch('ui/getFileStatus');
  498.  +      this.loaded = true;
  499.  +    }catch(e){
  500.  +      this.loaded = false;
  501.  +    }
  502.     },
  503.     data() {
  504.       return {
  505.  @@ -74,8 +78,12 @@ export default {
  506.         this.reverse = (this.sortKey == sortKey) ? !this.reverse : false;
  507.         this.sortKey = sortKey;
  508.       },
  509.  -    deleteFile(key) {
  510.  -      ui.deleteFile(this, key);
  511.  +    async deleteFile(key) {
  512.  +      try{
  513.  +        await state.dispatch('ui/deleteFile', key);
  514.  +      }catch(e){
  515.  +        console.log("Error deleting file...");
  516.  +      }
  517.       },
  518.       exportFile(index) {
  519.         var self = this;
  520.  @@ -84,14 +92,10 @@ export default {
  521.       }
  522.     },
  523.     computed: {
  524.  -    fileStatus: function() {
  525.  -      return state.getters.fileStatus;
  526.  -    },
  527.  +    fileStatus: () => state.getters['ui/fileStatus'],
  528.  +    siteSettings: () => state.getters['ui/siteSettings'],
  529.       sortedFileStatus: function() {
  530.         return (this.reverse == false) ? this._.sortBy(this.fileStatus, this.sortKey) : this._.sortBy(this.fileStatus, this.sortKey).reverse();
  531.  -    },
  532.  -    siteSettings: function(){
  533.  -      return state.getters.siteSettings;
  534.       }
  535.     },
  536.     watch: {
  537.  @@ -115,7 +119,6 @@ export default {
  538.                 state.commit('setFileStatus', fs);
  539.               }
  540.             });
  541.  -          //self.$forceUpdate();
  542.           });
  543.         });
  544.       }
  545. View  
  546. 40  webpack/src/components/Dashboard/UserPrefs.vue
  547.  @@ -90,7 +90,7 @@
  548.   <script>
  549.   import state from '@/state';
  550.   import util from '@/util';
  551.  -import ui from '@/api/ui';
  552.  +
  553.   import ExportPrefs from '@/components/Dashboard/UserPrefs/ExportPrefs';
  554.  
  555.   export default {
  556.  @@ -132,16 +132,20 @@ export default {
  557.         this.saveNotificationPrefs();
  558.         //this.$forceUpdate();
  559.       },
  560.  -    saveNotificationPrefs() {
  561.  -      var request = {
  562.  -        enable_standard_notification: (this.enable_standard_notification == true) ? '1' : '0',
  563.  -        enable_distributor_notification: (this.enable_distributor_notification == true) ? '1' : '0',
  564.  -        notification_email: this.emailString
  565.  -      }
  566.  +    async saveNotificationPrefs() {
  567.  +      try{
  568.  +        await state.dispatch('ui/changeSetting', {
  569.  +          enable_standard_notification: (this.enable_standard_notification == true) ? '1' : '0',
  570.  +          enable_distributor_notification: (this.enable_distributor_notification == true) ? '1' : '0',
  571.  +          notification_email: this.emailString
  572.  +        });
  573.  
  574.  -      ui.changeSetting(this, request);
  575.  +        this.saved = true;
  576.  +      }catch(e){
  577.  +        this.error = e.toString();
  578.  +      }
  579.       },
  580.  -    updatePassword: function() {
  581.  +    async updatePassword() {
  582.         var self = this;
  583.         var required = ['current_password', 'new_password', 'confirm_new_password'];
  584.  
  585.  @@ -165,19 +169,13 @@ export default {
  586.           return;
  587.         }
  588.  
  589.  -      ui.verifyPassword(self.current_password, function(err, result) {
  590.  -        if (err) {
  591.  -          self.error = "Could not verify your old password.  Please try again.";
  592.  -
  593.  -          return;
  594.  -        }
  595.  -
  596.  -        ui.changeSetting(self, {
  597.  -          newPassword: self.new_password
  598.  -        });
  599.  -
  600.  +      try{
  601.  +        await state.dispatch('ui/verifyPassword', self.current_password);
  602.  +        await state.dispatch('ui/changeSetting', {newPassword: self.new_password});
  603.           self.passwordUpdated = true;
  604.  -      });
  605.  +      }catch(e){
  606.  +        self.error = "Could not verify your old password.  Please try again.";
  607.  +      }
  608.       }
  609.     },
  610.     data() {
  611. View  
  612. 19  webpack/src/components/Dashboard/UserPrefs/ExportPrefs.vue
  613.  @@ -42,7 +42,6 @@
  614.   </template>
  615.   <script>
  616.   import state from '@/state';
  617.  -import ui from '@/api/ui';
  618.  
  619.   export default {
  620.     created(){
  621.  @@ -69,12 +68,8 @@ export default {
  622.       }
  623.     },
  624.     computed: {
  625.  -    siteSettings: function(){
  626.  -      return state.getters.siteSettings;
  627.  -    },
  628.  -    userData: function(){
  629.  -      return state.getters.userData;
  630.  -    },
  631.  +    siteSettings:() => state.getters['ui/siteSettings'],
  632.  +    userData: () => state.getters.userData,
  633.       exportSetting: function(){
  634.         return this.userData.export_setting;
  635.       },
  636.  @@ -136,14 +131,16 @@ export default {
  637.           return (typeof existingItem == 'undefined');
  638.         });
  639.       },
  640.  -    save: function(){
  641.  +    async save(){
  642.         var self = this;
  643.  
  644.         this.saving = true;
  645.  
  646.  -      ui.changeSetting(self, {
  647.  -        export_setting: self.newExportSetting
  648.  -      });
  649.  +      try{
  650.  +        await state.dispatch('ui/changeSetting', {export_setting: self.newExportSetting});
  651.  +      }catch(e){
  652.  +        console.log("Error updating export prefs");
  653.  +      }
  654.       }
  655.     },
  656.     watch: {
  657. View  
  658. 37  webpack/src/components/Frontend/Home.vue
  659.  @@ -243,7 +243,6 @@
  660.   <script>
  661.   import state from '@/state';
  662.   import util from '@/util';
  663.  -import ui from '@/api/ui';
  664.  
  665.   export default {
  666.     data(){
  667.  @@ -261,8 +260,17 @@ export default {
  668.       }
  669.     },
  670.     methods: {
  671.  -    register(){
  672.  -      ui.getInvitationCode(this, this.invitationCode);
  673.  +    async register(){
  674.  +      try{
  675.  +        let result = await state.dispatch('ui/getInvitationCode', this.invitationCode);
  676.  +        this.inviteRequest = result;
  677.  +
  678.  +        this.inviteCodeChecked = true;
  679.  +
  680.  +        this.$router.push({name: 'registration-page', params: {inviteCode: this.invitationCode}});
  681.  +      }catch(e){
  682.  +        this.inviteCodeChecked = true;
  683.  +      }
  684.       },
  685.       requestInvite(){
  686.         if(util.validateEmail(this.email)){
  687.  @@ -273,25 +281,16 @@ export default {
  688.       }
  689.     },
  690.     watch: {
  691.  -    emailInvalid: function(){
  692.  -      var self = this;
  693.  +    async emailInvalid(){
  694.  +      await util.sleep(3);
  695.  
  696.  -      setTimeout(function(){
  697.  -        self.emailInvalid = false;
  698.  -      }, 3000);
  699.  +      this.emailInvalid = false;
  700.       },
  701.  -    inviteCodeChecked: function(status){
  702.  -      var self = this;
  703.  
  704.  -      if(status){
  705.  -        if(self.inviteRequest == null){
  706.  -          setTimeout(function(){
  707.  -            self.inviteCodeChecked = false;
  708.  -          }, 3000);
  709.  -        }else{
  710.  -          this.$router.push({name: 'registration-page', params: {inviteCode: self.invitationCode}});
  711.  -        }
  712.  -      }
  713.  +    async inviteCodeChecked(){
  714.  +      await util.sleep(3);
  715.  +
  716.  +      this.inviteCodeChecked = false;
  717.       }
  718.     },
  719.     mounted(){
  720. View  
  721. 21  webpack/src/components/Frontend/LoginPage.vue
  722.  @@ -13,7 +13,6 @@
  723.   <!-- /container -->
  724.   </template>
  725.   <script>
  726.  -import auth from '@/api/auth';
  727.   import state from '@/state';
  728.   import util from '@/util';
  729.  
  730.  @@ -32,16 +31,24 @@ export default {
  731.       }
  732.     },
  733.     methods: {
  734.  -    login: function() {
  735.  -      auth.login(this, this.username, this.password, this.noRedirect);
  736.  +    async login() {
  737.  +      try{
  738.  +        await state.dispatch('login', {username: this.username, password: this.password});
  739.  +
  740.  +        if(this.noRedirect){
  741.  +          return;
  742.  +        }
  743.  +
  744.  +        this.$router.push('/dashboard');
  745.  +      }catch(e){
  746.  +        this.error = e.toString();
  747.  +      }
  748.       }
  749.     },
  750.     watch: {
  751.  -    error: async function(value) {
  752.  -      let self = this;
  753.  -
  754.  +    async error(value) {
  755.         await util.sleep(3);
  756.  -      self.error = null;
  757.  +      this.error = null;
  758.       }
  759.     }
  760.   }
  761. View  
  762. 8  webpack/src/router/index.js
  763.  @@ -28,7 +28,7 @@ import SuperAdminHome from '@/components/SuperAdmin/Home';
  764.   import SuperAdminInviteRequest from '@/components/SuperAdmin/InviteRequest';
  765.   import Logs from '@/components/SuperAdmin/Logs';
  766.  
  767.  -import auth from '@/api/auth';
  768.  +import state from '@/state';
  769.  
  770.   Vue.use(Router)
  771.  
  772.  @@ -157,9 +157,11 @@ const router = new Router({
  773.   });
  774.  
  775.   router.beforeEach(function(to, from, next){
  776.  -  auth.checkLoginState();
  777.  +  (async () => {
  778.  +    await state.dispatch('checkLoginState');
  779.  
  780.  -  return next();
  781.  +    return next();
  782.  +  })();
  783.   });
  784.  
  785.   export default router;
  786. View  
  787. 123  webpack/src/state.js
  788. @@ -1,7 +1,8 @@
  789.   import Vue from 'vue'
  790.   import Vuex from 'vuex'
  791.  
  792.  -import ui from '@/state/ui';
  793.  +import ui from '@/stores/ui';
  794.  +import util from '@/util';
  795.  
  796.   Vue.use(Vuex)
  797.  
  798.  @@ -10,104 +11,84 @@ Vue.use(Vuex)
  799.   const state = {
  800.     loggedIn: false,
  801.     loginStateChecked: false,
  802.  -  userData: null,
  803.  -  fileToConfigure: null,
  804.  -  fileStatus: [],
  805.  -  distributorLink: {},
  806.  -  filePendingExport: null,
  807.  -  siteSettings: null,
  808.  -  exportPreview: []
  809.  +  userData: null
  810.   }
  811.  
  812.  -// mutations are operations that actually mutates the state.
  813.  -// each mutation handler gets the entire state tree as the
  814.  -// first argument, followed by additional payload arguments.
  815.  -// mutations must be synchronous and can be recorded by plugins
  816.  -// for debugging purposes.
  817.  -const mutations = {
  818.  -  /*User state data*/
  819.  -  setLoginState: function(state, loginState){
  820.  -    state.loggedIn = loginState;
  821.  -  },
  822.  +const actions = {
  823.  +  async login(state, credentials){
  824.  +    try{
  825.  +      let data = await util.post('/api/user/login', {username: credentials.username, password: credentials.password});
  826.  
  827.  -  setLoginStateChecked: function(state, loginStateChecked){
  828.  -    state.loginStateChecked = loginStateChecked;
  829.  +      state.commit('setUserData', data.result);
  830.  +      state.commit('setLoginState', true);
  831.  +      state.commit('setLoginStateChecked', true);
  832.  +    }catch(e){
  833.  +      throw e;
  834.  +    }
  835.     },
  836.  
  837.  -  setUserData: function(state, userData){
  838.  -    state.userData = userData;
  839.  -  },
  840.  +  async logout(state){
  841.  +    try{
  842.  +      await util.post('/api/user/logout');
  843.  
  844.  -  setFileToConfigure: function(state, fileToConfigure){
  845.  -    state.fileToConfigure = fileToConfigure;
  846.  -  },
  847.  +      state.commit('setLoginState', false);
  848.  +      state.commit('setLoginStateChecked', true);
  849.  +      state.commit('setUserData', null);
  850.  
  851.  -  setFileStatus: function(state, fileStatus){
  852.  -    state.fileStatus = fileStatus;
  853.  +      return;
  854.  +    }catch(e){
  855.  +      console.log("Logout failure in state.js");
  856.  +    }
  857.     },
  858.  
  859.  -  setFilePendingExport: function(state, file){
  860.  -    state.filePendingExport = file;
  861.  -  },
  862.  +  async checkLoginState(state){
  863.  +    try{
  864.  +      let data = await util.post('/api/user/isLoggedIn');
  865.  
  866.  -  setDistributorLink: function(state, distributorLink){
  867.  -    state.distributorLink = distributorLink;
  868.  -  },
  869.  +      state.commit('setLoginState', data.result);
  870.  +      state.commit('setLoginStateChecked', true);
  871.  
  872.  -  setSiteSettings: function(state, siteSettings){
  873.  -    state.siteSettings = siteSettings;
  874.  -  },
  875.  +      if(data.result == true){
  876.  +        state.commit('setUserData', data.userData);
  877.  +      }
  878.  
  879.  -  setExportPreview: function(state, exportPreview){
  880.  -    state.exportPreview = exportPreview;
  881.  +      return;
  882.  +    }catch(e){
  883.  +      state.commit('setLoginState', false);
  884.  +      state.commit('setLoginStateChecked', true);
  885.  +    }
  886.     }
  887.   }
  888.  
  889.  -
  890.  -// getters are functions
  891.  -const getters = {
  892.  -  loggedIn: function(){
  893.  -    return state.loggedIn;
  894.  -  },
  895.  -
  896.  -  loginStateChecked: function(){
  897.  -    return state.loginStateChecked;
  898.  -  },
  899.  -
  900.  -  userData: function(){
  901.  -    return state.userData
  902.  -  },
  903.  -
  904.  -  fileToConfigure: function(){
  905.  -    return state.fileToConfigure;
  906.  -  },
  907.  -
  908.  -  fileStatus: function(){
  909.  -    return state.fileStatus;
  910.  +const mutations = {
  911.  +  /*User state data*/
  912.  +  setLoginState(state, loginState) {
  913.  +    state.loggedIn = loginState;
  914.     },
  915.  
  916.  -  filePendingExport: function(){
  917.  -    return state.filePendingExport;
  918.  +  setLoginStateChecked(state, loginStateChecked) {
  919.  +    state.loginStateChecked = loginStateChecked;
  920.     },
  921.  
  922.  -  distributorLink: function(){
  923.  -    return state.distributorLink;
  924.  -  },
  925.  +  setUserData(state, userData) {
  926.  +    state.userData = userData;
  927.  +  }
  928.  +}
  929.  
  930.  -  siteSettings: function(){
  931.  -    return state.siteSettings;
  932.  -  },
  933.  
  934.  -  exportPreview: function(){
  935.  -    return state.exportPreview;
  936.  -  }
  937.  +// getters are functions
  938.  +const getters = {
  939.  +  loggedIn: state => state.loggedIn,
  940.  +  loginStateChecked: state => state.loginStateChecked,
  941.  +  userData: state => state.userData
  942.   }
  943.  
  944.   // A Vuex instance is created by combining the state, mutations, actions,
  945.   // and getters.
  946.   export default new Vuex.Store({
  947.     state,
  948.     getters,
  949.  +  actions,
  950.     mutations,
  951.     modules: {
  952.       ui
  953. View  
  954. 33  webpack/src/state/ui.js
  955. @@ -1,33 +0,0 @@
  956.  -export default {
  957.  -  namespaced: true,
  958.  -
  959.  -  state: {
  960.  -    test: []
  961.  -  },
  962.  -
  963.  -  actions: {
  964.  -    async setTestAsync(state, test){
  965.  -      try{
  966.  -        console.log("Getting request");
  967.  -        
  968.  -        let result = await axios.post('/test');
  969.  -
  970.  -        state.commit('setTest', result);
  971.  -
  972.  -        return;
  973.  -      }catch(e){
  974.  -
  975.  -      }
  976.  -    }
  977.  -  },
  978.  -
  979.  -  mutations: {
  980.  -    setTest(state, test){
  981.  -      state.test = test;
  982.  -    }
  983.  -  },
  984.  -
  985.  -  getters: {
  986.  -    test: state => state.test
  987.  -  }
  988.  -}
  989. View  
  990. 254  webpack/src/stores/ui.js
  991. @@ -0,0 +1,254 @@
  992.  +import util from '@/util';
  993.  +
  994.  +export default {
  995.  +  namespaced: true,
  996.  +
  997.  +  state: {
  998.  +    mwsKeyValid: null,
  999.  +    signupComplete: null,
  1000.  +    siteSettings: null,
  1001.  +    fileStatus: [],
  1002.  +    exportPreview: [],
  1003.  +    distributorLink: {},
  1004.  +    fileToConfigure: null
  1005.  +  },
  1006.  +
  1007.  +  actions: {
  1008.  +    async checkMWSKey(state, credentials){
  1009.  +      try{
  1010.  +        await util.post('/api/user/checkMWSKey', {
  1011.  +          merchantId: credentials.merchantId,
  1012.  +          authToken: credentials.authToken
  1013.  +        });
  1014.  +
  1015.  +        state.commit('mwsKeyValid', true);
  1016.  +
  1017.  +        return;
  1018.  +      }catch(e){
  1019.  +        state.commit('mwsKeyValid', false);
  1020.  +
  1021.  +        throw e;
  1022.  +      }
  1023.  +    },
  1024.  +
  1025.  +    async register(state, opts){
  1026.  +      try{
  1027.  +        await util.post('/api/user/register', opts);
  1028.  +
  1029.  +        state.commit('signupComplete', true);
  1030.  +
  1031.  +        return;
  1032.  +      }catch(e){
  1033.  +        state.commit('signupComplete', false);
  1034.  +
  1035.  +        throw e;
  1036.  +      }
  1037.  +    },
  1038.  +
  1039.  +    async getSiteSettings(state, opts){
  1040.  +      try{
  1041.  +        let siteSettings = await util.post('/api/frontend/siteSettings');
  1042.  +
  1043.  +        state.commit('siteSettings', siteSettings.result);
  1044.  +
  1045.  +        return;
  1046.  +      }catch(e){
  1047.  +        throw e;
  1048.  +      }
  1049.  +    },
  1050.  +
  1051.  +    async getFileStatus(state){
  1052.  +      try{
  1053.  +        let fileStatus = await util.post('/api/dashboard/status');
  1054.  +
  1055.  +        state.commit('fileStatus', fileStatus.result);
  1056.  +
  1057.  +        return;
  1058.  +      }catch(e){
  1059.  +        throw e;
  1060.  +      }
  1061.  +    },
  1062.  +
  1063.  +    async deleteFile(state, key){
  1064.  +      try{
  1065.  +        await util.post('/api/dashboard/deleteCSV', {fileId: key});
  1066.  +        await state.dispatch('getFileStatus');
  1067.  +
  1068.  +        return;
  1069.  +      }catch(e){
  1070.  +        throw e;
  1071.  +      }
  1072.  +    },
  1073.  +
  1074.  +    async getDistributorLink(state){
  1075.  +      try{
  1076.  +        let distributorLink = await util.post('/api/dashboard/distributorLink');
  1077.  +
  1078.  +        state.commit('distributorLink', distributorLink.result);
  1079.  +
  1080.  +        return;
  1081.  +      }catch(e){
  1082.  +        throw e;
  1083.  +      }
  1084.  +    },
  1085.  +
  1086.  +    async deleteDistributorLink(state, linkId){
  1087.  +      try{
  1088.  +        await state.dispatch('getDistributorLink');
  1089.  +
  1090.  +        await util.post('/api/dashboard/deleteDistributorLink', {
  1091.  +          linkId: linkId
  1092.  +        });
  1093.  +
  1094.  +        let dl = state.getters.distributorLink;
  1095.  +
  1096.  +        delete dl[linkId];
  1097.  +
  1098.  +        state.commit('distributorLink', dl);
  1099.  +      }catch(e){
  1100.  +        throw e;
  1101.  +      }
  1102.  +    },
  1103.  +
  1104.  +    async createDistributorLink(state, request){
  1105.  +      try{
  1106.  +        await util.post('/api/dashboard/createDistributorLink', request);
  1107.  +        await state.dispatch('getDistributorLink');
  1108.  +
  1109.  +        return;
  1110.  +      }catch(e){
  1111.  +        throw e;
  1112.  +      }
  1113.  +    },
  1114.  +
  1115.  +    async fetchCSVHeader(state, url){
  1116.  +      try{
  1117.  +        let data = await util.post('/api/csv/fetchCSVHeader', {url: url});
  1118.  +
  1119.  +        return data.result;
  1120.  +      }catch(e){
  1121.  +        throw e;
  1122.  +      }
  1123.  +    },
  1124.  +
  1125.  +    async validateCSVUrl(state, opts){
  1126.  +      try{
  1127.  +        return await util.post('/api/csv/validateCSVUrl', {url: opts.url, map: opts.map});
  1128.  +      }catch(e){
  1129.  +        throw e;
  1130.  +      }
  1131.  +    },
  1132.  +
  1133.  +    async getExportPreview(state, opts){
  1134.  +      try{
  1135.  +        opts.json = true;
  1136.  +
  1137.  +        let data = await util.post('/api/csv/export', opts);
  1138.  +
  1139.  +        state.commit('exportPreview', data.result);
  1140.  +      }catch(e){
  1141.  +        throw e;
  1142.  +      }
  1143.  +    },
  1144.  +
  1145.  +    async configureCSV(state, csvData){
  1146.  +      if(csvData.min_stock_qty == '' || !csvData.min_stock_qty){
  1147.  +        csvData.min_stock_qty = 0;
  1148.  +      }
  1149.  +
  1150.  +      try{
  1151.  +        let result = await util.post('/api/csv/configure', csvData);
  1152.  +
  1153.  +        return result.csv_header;
  1154.  +      }catch(e){
  1155.  +        throw e;
  1156.  +      }
  1157.  +    },
  1158.  +
  1159.  +    async mapCSV(state, csvData){
  1160.  +      try{
  1161.  +        await util.post('/api/csv/map', csvData);
  1162.  +
  1163.  +        state.commit('fileToConfigure', null);
  1164.  +
  1165.  +        return;
  1166.  +      }catch(e){
  1167.  +        throw e;
  1168.  +      }
  1169.  +    },
  1170.  +
  1171.  +    async changeSetting(state, settings){
  1172.  +      try{
  1173.  +        let userData = await util.post('/api/user/changeSetting', settings);
  1174.  +        state.commit('setUserData', userData.result, {root: true});
  1175.  +        return;
  1176.  +      }catch(e){
  1177.  +        throw e;
  1178.  +      }
  1179.  +    },
  1180.  +
  1181.  +    async verifyPassword(state, password){
  1182.  +      try{
  1183.  +        let data = await util.post('/api/user/verifyPassword', {
  1184.  +          password: password
  1185.  +        });
  1186.  +
  1187.  +        return data.result;
  1188.  +      }catch(e){
  1189.  +        throw e;
  1190.  +      }
  1191.  +    },
  1192.  +    
  1193.  +    async getInvitationCode(state, code){
  1194.  +      try{
  1195.  +        let data = await util.post('/api/frontend/getInvitationCode', {
  1196.  +          invite_code: code
  1197.  +        });
  1198.  +
  1199.  +        return data.result;
  1200.  +      }catch(e){
  1201.  +        throw e;
  1202.  +      }
  1203.  +    }
  1204.  +  },
  1205.  +
  1206.  +  mutations: {
  1207.  +    siteSettings(state, settings){
  1208.  +      state.siteSettings = settings;
  1209.  +    },
  1210.  +
  1211.  +    signupComplete(state, signupComplete){
  1212.  +      state.signupComplete = signupComplete;
  1213.  +    },
  1214.  +
  1215.  +    mwsKeyValid(state, status){
  1216.  +      state.mwsKeyValid = status;
  1217.  +    },
  1218.  +
  1219.  +    fileStatus(state, status){
  1220.  +      state.fileStatus = status;
  1221.  +    },
  1222.  +
  1223.  +    exportPreview(state, preview){
  1224.  +      state.exportPreview = preview;
  1225.  +    },
  1226.  +
  1227.  +    distributorLink(state, link){
  1228.  +      state.distributorLink = link;
  1229.  +    },
  1230.  +
  1231.  +    fileToConfigure(state, file){
  1232.  +      state.fileToConfigure = file;
  1233.  +    }
  1234.  +  },
  1235.  +
  1236.  +  getters: {
  1237.  +    siteSettings: state => state.siteSettings,
  1238.  +    signupComplete: state => state.signupComplete,
  1239.  +    mwsKeyValid: state => state.mwsKeyValid,
  1240.  +    fileStatus: state => state.fileStatus,
  1241.  +    exportPreview: state => state.exportPreview,
  1242.  +    distributorLink: state => state.distributorLink,
  1243.  +    fileToConfigure: state => state.fileToConfigure
  1244.  +  }
  1245.  +}

Reply to "Untitled"

Here you can reply to the paste above

Use TinyW.in

Make Private

Feeling clever? Set some advanced options.