HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/buyercall/assets/vue/widgets/Worklist/components/TaskList.vue
<template>
  <div>
    <div class="spinner-main" v-if="tasksLoading && !viewMoreButtonClicked">
      <loader :loading="true"> </loader>
    </div>
    <template v-if="!(tasksLoading && !viewMoreButtonClicked)">
      <h5 class="font-size-14 mb-3" v-if="!tasks.length">
        There are no tasks available at this moment.
      </h5>
      <template v-else>
        <div class="d-flex justify-content-between align-items-center">
          <button type="button" class="btn header-item noti-icon waves-effect">
            <!-- <i class="bx bx-bell bx-tada"></i> -->
            <Icon icon="noto:bell" height="20" />
            <span class="badge bg-danger rounded-pill">{{
              state.unViewedTaskCount
            }}</span>
          </button>
          <!-- <a
            class="text-reset bg-success badge rounded-pill bg-success p-2"
            v-if="state.unViewedTaskCount > 0"
            @click.prevent="reloadTasks"
            role="button"
            >You have recieved new tasks. Reload!<i
              class="mdi mdi-arrow-right"
            ></i
          ></a> -->
        </div>
        <div class="d-flex gap-2 flex-wrap mb-2">
          <div class="btn-group me-1 mt-2">
            <button
              class="btn btn-secondary btn-sm dropdown-toggle"
              type="button"
              data-bs-toggle="dropdown"
              aria-expanded="false"
            >
              Status - {{ getSelectedStatusFilterName }}
              <i class="mdi mdi-chevron-down"></i>
            </button>
            <div class="dropdown-menu">
              <a
                class="dropdown-item"
                role="button"
                @click.prevent="setTaskStatusFilter('ALL')"
                >All</a
              >
              <template v-if="getAvailableTaskStatusFilters.length"> </template>
              <a
                v-for="(record, index) in getAvailableTaskStatusFilters[0]
                  .filters"
                :key="index"
                class="dropdown-item"
                role="button"
                @click.prevent="setTaskStatusFilter(record.keyword)"
                >{{ record.displayName }} ( {{ record.count }})</a
              >
            </div>
          </div>
          <div class="btn-group me-1 mt-2">
            <button
              class="btn btn-secondary btn-sm dropdown-toggle"
              type="button"
              data-bs-toggle="dropdown"
              aria-expanded="false"
            >
              Task Type - {{ getSelectedTypeFilterName }}
              <i class="mdi mdi-chevron-down"></i>
            </button>
            <div class="dropdown-menu">
              <a
                class="dropdown-item"
                role="button"
                @click.prevent="setTaskTypeFilter('ALL')"
                >All</a
              >
              <template v-if="getAvailableTaskTypeFilters.length"> </template>
              <a
                v-for="(record, index) in getAvailableTaskTypeFilters[0]
                  .filters"
                :key="index"
                class="dropdown-item"
                role="button"
                @click.prevent="setTaskTypeFilter(record.keyword)"
                >{{ record.displayName }}( {{ record.count }})</a
              >
            </div>
          </div>
        </div>
        <tasks-by-day
          v-for="(task, index) in tasks"
          :key="index"
          :task="task"
          :bucketLimit="bucketLimit"
        ></tasks-by-day>
        <div class="mt-4 text-center" v-if="task_show_view_more_button">
          <button
            type="button"
            class="btn btn-primary"
            @click="onViewMoreButtonClick"
          >
            <i
              class="bx bx-loader bx-spin font-size-16 align-middle me-2"
              v-if="state.tasksLoading"
            ></i>
            View More
          </button>
        </div>
      </template>
    </template>
  </div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex';
import { Icon } from '@iconify/vue';

import {
  TASK_GETTER_GET_TASK_LIST,
  TASK_GETTER_SHOW_VIEW_MORE_BUTTON,
  TASK_GETTER,
  TASK_ACTION_GET_TASK_LIST,
  TASK_ACTION_SET_CURRENT_PAGE_TASK_LIST,
  TASK_ACTION_SET_STATUS_FILTER_TASK_LIST,
  TASK_ACTION_GET_TASKS_META,
  TASK_ACTION_RELOAD_TASK_LIST,
  TASK_ACTION_SET_TYPE_FILTER_TASK_LIST,
} from '../constants';
import TasksByDay from './TasksByDay.vue';
import Loader from '../../../components/Loader/loader.vue';
import * as _ from 'lodash';
export default {
  mounted() {
    this.getTaskMetaTimerID = setInterval(() => {
      this.getTaskMeta();
    }, 5000);
  },
  data() {
    return {
      getTaskMetaTimerID: null,
      bucketLimit: 4,
      viewMoreButtonClicked: false,
    };
  },
  components: {
    TasksByDay,
    Loader,
    Icon
  },
  computed: {
    ...mapGetters('tasks', {
      state: TASK_GETTER,
      tasks: TASK_GETTER_GET_TASK_LIST,
      task_show_view_more_button: TASK_GETTER_SHOW_VIEW_MORE_BUTTON,
    }),
    tasksLoading() {
      return this.state.tasksLoading;
    },
    taskFetchParameter() {
      return `${this.state.currentpage}-${this.state.taskfetchLimit}-${this.state.taskStatusFilter}-${this.state.reloadTimestamp}-${this.state.taskTypeFilter}`;
    },
    getAvailableTaskStatusFilters() {
      return _.filter(
        this.state.taskAggregations,
        ({ name }) => name === 'Status',
      );
    },
    getSelectedStatusFilterName() {
      if (this.state.taskStatusFilter === 'ALL') {
        return 'All';
      }
      return _.filter(
        _.filter(
          this.state.taskAggregations,
          ({ name }) => name === 'Status',
        )[0].filters,
        ({ keyword }) => keyword === this.state.taskStatusFilter,
      )[0].displayName;
    },
    getSelectedTypeFilterName() {
      if (this.state.taskTypeFilter === 'ALL') {
        return 'All';
      }
      return _.filter(
        _.filter(
          this.state.taskAggregations,
          ({ name }) => name === 'Task Type',
        )[0].filters,
        ({ keyword }) => keyword === this.state.taskTypeFilter,
      )[0].displayName;
    },
    getAvailableTaskTypeFilters() {
      return _.filter(
        this.state.taskAggregations,
        ({ name }) => name === 'Task Type',
      );
    },
  },
  methods: {
    ...mapActions('tasks', {
      getTasks: TASK_ACTION_GET_TASK_LIST,
      setCurrentPage: TASK_ACTION_SET_CURRENT_PAGE_TASK_LIST,
      setTaskStatusFilter: TASK_ACTION_SET_STATUS_FILTER_TASK_LIST,
      setTaskTypeFilter: TASK_ACTION_SET_TYPE_FILTER_TASK_LIST,
      getTaskMeta: TASK_ACTION_GET_TASKS_META,
      reloadTasks: TASK_ACTION_RELOAD_TASK_LIST,
    }),
    onViewMoreButtonClick() {
      this.viewMoreButtonClicked = true;
      this.setCurrentPage(this.state.currentpage + 1);
    },
  },
  watch: {
    taskFetchParameter() {
      this.getTasks();
    },
    tasksLoading(v) {
      if (!v) {
        this.viewMoreButtonClicked = false;
      }
    },
  },
  destroyed() {
    clearInterval(this.getTaskMetaTimerID);
  },
};
</script>