0

I am trying to atleast clean the component.ts using services or somthing in my angular i have many repetitive code that i trying to fix and refactor. I am trying to apply DRY as possible can i have a suggestion on how approach its hard since its a many declared variables

getSearch(){
    this.option = 2
    this.spinner.show();
    const params = {
        dateFrom: this.form.controls.dateFrom.value,
        dateTo: this.form.controls.dateTo.value,
        sortBy: {
          [this.sort_column]: this.sort_type
        }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter = [];
    this.request.post(Urls.transactionsOverview + '?page=' + this.current_page_filter + '&size=' + this.size_filter, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter = response.result.data;
        this.filterFields = response.result.filterFields
        console.log(this.itemLists_filter)
        console.log(this.filterFields)
        this.selectedOption = "getSearch";
        console.log(this.selectedOption)
          if (this.current_page_filter  === 0  ){
            this.pages_array_filter = [];
            for (let i = this.current_page_filter; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == response.result.totalPages){
            for (let i = this.current_page_filter - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else{
            for (let i = this.current_page_filter - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }
          this.total_pages_filter = parseInt(response.result.totalPages);
          this.current_page_filter = response.result.currentPage;
          this.total_filter = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
    this.form.reset();
  }

  get_search_list(){
    this.option = 2
    this.spinner.show();
    const params = {
      dateFrom: this.filterFields.dateFrom,
      dateTo: this.filterFields.dateTo,
      search: this.search_keyword_filter,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter = [];
    console.log(params)
    this.request.post(Urls.transactionsOverview + '?page=' + this.current_page_filter + '&size=' + this.size_filter, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter = response.result.data;
        this.filterFields = response.result.filterFields
        this.selectedOption = "getSearch";
        console.log(this.selectedOption)
          if (this.current_page_filter  === 0  ){
            this.pages_array_filter = [];
            for (let i = this.current_page_filter; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == response.result.totalPages){
            for (let i = this.current_page_filter - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else{
            for (let i = this.current_page_filter - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }
          this.total_pages_filter = parseInt(response.result.totalPages);
          this.current_page_filter = response.result.currentPage;
          this.total_filter = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
  }

  getSearch2(){
    this.option = 3
    this.spinner.show();
    const params = {
      dateFrom: this.form.controls.dateFrom.value,
      dateTo: this.form.controls.dateTo.value,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter2 = [];
    this.request.post(Urls.transactionsOverview + '?page=' + this.current_page_filter2 + '&size=' + this.size_filter2, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter2 = response.result.data;
        this.filterFields2 = response.result.filterFields
        console.log(this.itemLists_filter2)
        console.log(this.filterFields2)
        this.selectedOption = "getSearch2";
        console.log(this.selectedOption)
          if (this.current_page_filter2  === 0  ){
            this.pages_array_filter2 = [];
            for (let i = this.current_page_filter2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == response.result.totalPages){
            for (let i = this.current_page_filter2 - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else{
            for (let i = this.current_page_filter2 - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }
          this.total_pages_filter2 = parseInt(response.result.totalPages);
          this.current_page_filter2 = response.result.currentPage;
          this.total_filter2 = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
    this.form.reset();
  }

  get_search_list2(){
    this.option = 3
    this.spinner.show();
    const params = {
      dateFrom: this.filterFields2.dateFrom,
      dateTo: this.filterFields2.dateTo,
      search: this.search_keyword_filter2,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter2 = [];
    console.log(params)
    this.request.post(Urls.transactionsOverview + '?page=' + this.current_page_filter2 + '&size=' + this.size_filter2, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter2 = response.result.data;
        this.filterFields2 = response.result.filterFields
        console.log(this.filterFields2)
        this.selectedOption = "getSearch2";
        console.log(this.selectedOption)
          if (this.current_page_filter2  === 0  ){
            this.pages_array_filter2 = [];
            for (let i = this.current_page_filter2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == response.result.totalPages){
            for (let i = this.current_page_filter2 - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else{
            for (let i = this.current_page_filter2 - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }
          this.total_pages_filter2 = parseInt(response.result.totalPages);
          this.current_page_filter2 = response.result.currentPage;
          this.total_filter2 = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
         }
      }).finally(() => {
    });
  }

full reference of the code:

import { Component, OnInit ,  VERSION} from '@angular/core';
import { UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';
import { RequestsService } from 'src/app/core/services/http/requests.service';
import { Urls } from 'src/app/lib/urls';
import { DebounceService } from 'src/app/core/services/debounce.service';
import { NgxSpinnerService } from "ngx-spinner";
// import { ToastrService } from 'ngx-toastr';
// import { DialogService } from 'src/app/services/dialog.service';
// import * as XLSX from 'xlsx';
import { ApiService } from 'src/app/services/api.service';

@Component({
  selector: 'app-cash-in',
  templateUrl: './cash-in.component.html',
  styleUrls: ['./cash-in.component.scss']
})
export class CashInComponent implements OnInit {
  public form: UntypedFormGroup;
  isLoading: boolean;
  itemLists: any;
  search: any;
  tabId: any;
  fileName: any;
  url: any;
  params = {
    search: '',
  }

  // pagination
  page = 1;
  size = 10;
  total_pages: any;
  current_page = 1;
  pages_array = [
  ];
  total: any;
  item: any;
  lastPage: any;

  // paginationfilter
  page_filter = 1;
  size_filter = 10;
  total_pages_filter: any;
  current_page_filter = 1;
  pages_array_filter = [
  ];
  total_filter: any;
  item_filter: any;
  lastPage_filter: any;
  itemLists_filter: any;

  // paginationfilter2
  page_filter2 = 1;
  size_filter2 = 10;
  total_pages_filter2: any;
  current_page_filter2 = 1;
  pages_array_filter2 = [
  ];
  total_filter2: any;
  item_filter2: any;
  lastPage_filter2: any;
  itemLists_filter2: any;

   // search
   searchKey: any = null;
   searchForm : UntypedFormGroup;
   search_keyword = '';

   // searchfilter
   searchKey_filter: any = null;
   searchForm_filter : UntypedFormGroup;
   search_keyword_filter = '';

    // searchfilter2
    searchKey_filter2: any = null;
    searchForm_filter2 : UntypedFormGroup;
    search_keyword_filter2 = '';

   // selection viewALL or search
   option = 0
   selectedOption: any;

   // limit
   limitKey: any = null;
   limitForm : UntypedFormGroup;

   // limitFilter
   limitKey_filter: any = null;
   limitForm_filter: UntypedFormGroup;

    // limitFilter
    limitKey_filter2: any = null;
    limitForm_filter2: UntypedFormGroup;

  // null with default
  name = 'Angular ' + VERSION.major;

  // filterfields
  filterFields: any;
  filterFields2: any;

  // payment method
  paymentMethodType_text: any;
  paymentMethod: any;

  // account type
  statusType_text: any;
  status: number;

  // sorting
  sort_column = "dateTime";
  sort_type = "ASC";

  submitted = false;

  constructor(
    private fb : UntypedFormBuilder,
    public debounce: DebounceService,
    private request: RequestsService,
    private spinner: NgxSpinnerService,
    private apiService: ApiService
  ) {
    this.initializeForm();
  }

  ngOnInit(): void {
    const tableHeader = document.getElementsByTagName("th");
    for (let i = 0; i < tableHeader.length; i++) {
      tableHeader[i].classList.add("headerSortDown");
    }
    this.get_List();
    this.testGetCashInTransactions();
  }
  getSearch(){
    this.option = 2
    this.spinner.show();
    const params = {
      transactionId: this.form.controls.transactionId.value,
      firstName: this.form.controls.firstName.value,
      middleName: this.form.controls.middleName.value,
      lastName: this.form.controls.lastName.value,
      phoneNumber: this.form.controls.phoneNumber.value,
      dateFrom: this.form.controls.dateFrom.value,
      dateTo: this.form.controls.dateTo.value,
      paymentMethod: this.paymentMethod,
      status: this.status,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter = [];
    this.request.post(Urls.transactionsCashin + '?page=' + this.current_page_filter + '&size=' + this.size_filter, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter = response.result.data;
        this.filterFields = response.result.filterFields
        console.log(this.itemLists_filter)
        console.log(this.filterFields)
        this.selectedOption = "getSearch";
        console.log(this.selectedOption)
          if (this.current_page_filter  === 0  ){
            this.pages_array_filter = [];
            for (let i = this.current_page_filter; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == response.result.totalPages){
            for (let i = this.current_page_filter - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else{
            for (let i = this.current_page_filter - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }
          this.total_pages_filter = parseInt(response.result.totalPages);
          this.current_page_filter = response.result.currentPage;
          this.total_filter = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
    this.form.reset();
    this.paymentMethod = null;
    this.status = null;
    this.paymentMethodType_text = null;
    this.statusType_text = null;
  }

  get_search_list(){
    this.option = 2
    this.spinner.show();
    const params = {
      transactionId: this.filterFields.transactionId,
      firstName: this.filterFields.firstName,
      middleName: this.filterFields.middleName,
      lastName: this.filterFields.lastName,
      phoneNumber: this.filterFields.phoneNumber,
      dateFrom: this.filterFields.dateFrom,
      dateTo: this.filterFields.dateTo,
      paymentMethod: this.filterFields.paymentMethod,
      status: this.filterFields.status,
      search: this.search_keyword_filter,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter = [];
    console.log(params)
    this.request.post(Urls.transactionsCashin + '?page=' + this.current_page_filter + '&size=' + this.size_filter, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter = response.result.data;
        this.filterFields = response.result.filterFields
        this.selectedOption = "getSearch";
        console.log(this.selectedOption)
          if (this.current_page_filter  === 0  ){
            this.pages_array_filter = [];
            for (let i = this.current_page_filter; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else if (this.current_page_filter == response.result.totalPages){
            for (let i = this.current_page_filter - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }else{
            for (let i = this.current_page_filter - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter.push(i);
            };
          }
          this.total_pages_filter = parseInt(response.result.totalPages);
          this.current_page_filter = response.result.currentPage;
          this.total_filter = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
  }

  getSearch2(){
    this.option = 3
    this.spinner.show();
    const params = {
      transactionId: this.form.controls.transactionId.value,
      firstName: this.form.controls.firstName.value,
      middleName: this.form.controls.middleName.value,
      lastName: this.form.controls.lastName.value,
      phoneNumber: this.form.controls.phoneNumber.value,
      dateFrom: this.form.controls.dateFrom.value,
      dateTo: this.form.controls.dateTo.value,
      paymentMethod: this.paymentMethod,
      status: this.status,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter2 = [];
    this.request.post(Urls.transactionsCashin + '?page=' + this.current_page_filter2 + '&size=' + this.size_filter2, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter2 = response.result.data;
        this.filterFields2 = response.result.filterFields
        console.log(this.itemLists_filter2)
        console.log(this.filterFields2)
        this.selectedOption = "getSearch2";
        console.log(this.selectedOption)
          if (this.current_page_filter2  === 0  ){
            this.pages_array_filter2 = [];
            for (let i = this.current_page_filter2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == response.result.totalPages){
            for (let i = this.current_page_filter2 - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else{
            for (let i = this.current_page_filter2 - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }
          this.total_pages_filter2 = parseInt(response.result.totalPages);
          this.current_page_filter2 = response.result.currentPage;
          this.total_filter2 = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
    this.form.reset();
    this.paymentMethod = null;
    this.status = null;
    this.paymentMethodType_text = null;
    this.statusType_text = null;
  }

  get_search_list2(){
    this.spinner.show();
    const params = {
      transactionId: this.filterFields2.transactionId,
      firstName: this.filterFields2.firstName,
      middleName: this.filterFields2.middleName,
      lastName: this.filterFields2.lastName,
      phoneNumber: this.filterFields2.phoneNumber,
      dateFrom: this.filterFields2.dateFrom,
      dateTo: this.filterFields2.dateTo,
      paymentMethod: this.filterFields2.paymentMethod,
      status: this.filterFields2.status,
      search: this.search_keyword_filter2,
      sortBy: {
        [this.sort_column]: this.sort_type
      }
    }
    localStorage.setItem('itemLists', JSON.stringify(params));
    this.pages_array_filter2 = [];
    console.log(params)
    this.request.post(Urls.transactionsCashin + '?page=' + this.current_page_filter2 + '&size=' + this.size_filter2, params).then(response => {
      if (response.status == 200){
        this.itemLists_filter2 = response.result.data;
        this.filterFields2 = response.result.filterFields
        console.log(this.filterFields2)
        this.selectedOption = "getSearch2";
        console.log(this.selectedOption)
          if (this.current_page_filter2  === 0  ){
            this.pages_array_filter2 = [];
            for (let i = this.current_page_filter2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else if (this.current_page_filter2 == response.result.totalPages){
            for (let i = this.current_page_filter2 - 2; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }else{
            for (let i = this.current_page_filter2 - 1; i <= response.result.totalPages; i++){
              this.pages_array_filter2.push(i);
            };
          }
          this.total_pages_filter2 = parseInt(response.result.totalPages);
          this.current_page_filter2 = response.result.currentPage;
          this.total_filter2 = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
  }

  get_List(){
      this.option = 1
      this.spinner.show();
      const params = {
        search : this.search_keyword,
        sortBy: {
          [this.sort_column]: this.sort_type
        }
      }
      this.pages_array = [];
      localStorage.setItem('itemLists', JSON.stringify(params));
      this.request.post(Urls.transactionsCashin + '?page=' + this.current_page + '&size=' + this.size, params).then(response => {
      this.itemLists = response.result.data;
        if (response.status == 200){
          if (this.current_page  === 0  ){
            this.pages_array = [];
            for (let i = this.current_page; i <= response.result.totalPages; i++){
              this.pages_array.push(i);
            };
          }else if (this.current_page == 1){
            for (let i = 1; i <= response.result.totalPages; i++){
              this.pages_array.push(i);
            };
          }else if (this.current_page == response.result.totalPages){
            for (let i = this.current_page - 2; i <= response.result.totalPages; i++){
              this.pages_array.push(i);
            };
          }else{
            for (let i = this.current_page - 1; i <= response.result.totalPages; i++){
              this.pages_array.push(i);
            };
          }
          this.total_pages = parseInt(response.result.totalPages);
          this.current_page = response.result.currentPage;
          this.total = parseInt(response.result.totalItems);
          setTimeout(() => {
            this.spinner.hide();
          }, 500);
        }
      }).finally(() => {
    });
  }



refactor and non repetitive code as possible using service or other approach that i can use.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.