# Pull Request Template ## Description This PR introduces a new Companies section in the Chatwoot dashboard. It lists all companies associated with the account and includes features such as **search**, **sorting**, and **pagination** to enable easier navigation and efficient management. Fixes https://linear.app/chatwoot/issue/CW-5928/add-companies-tab-to-dashboard ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ### Screenshot <img width="1619" height="1200" alt="image" src="https://github.com/user-attachments/assets/21f0a666-c3d6-4dec-bd02-1e38e0cd9542" /> ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com> Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
51 lines
1.6 KiB
Vue
51 lines
1.6 KiB
Vue
<script setup>
|
|
import CompanyHeader from './CompaniesHeader/CompanyHeader.vue';
|
|
import PaginationFooter from 'dashboard/components-next/pagination/PaginationFooter.vue';
|
|
|
|
defineProps({
|
|
searchValue: { type: String, default: '' },
|
|
headerTitle: { type: String, default: '' },
|
|
currentPage: { type: Number, default: 1 },
|
|
totalItems: { type: Number, default: 100 },
|
|
activeSort: { type: String, default: 'name' },
|
|
activeOrdering: { type: String, default: '' },
|
|
});
|
|
|
|
const emit = defineEmits(['update:currentPage', 'update:sort', 'search']);
|
|
|
|
const updateCurrentPage = page => {
|
|
emit('update:currentPage', page);
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<section
|
|
class="flex w-full h-full gap-4 overflow-hidden justify-evenly bg-n-background"
|
|
>
|
|
<div class="flex flex-col w-full h-full transition-all duration-300">
|
|
<CompanyHeader
|
|
:search-value="searchValue"
|
|
:header-title="headerTitle"
|
|
:active-sort="activeSort"
|
|
:active-ordering="activeOrdering"
|
|
@search="emit('search', $event)"
|
|
@update:sort="emit('update:sort', $event)"
|
|
/>
|
|
<main class="flex-1 overflow-y-auto">
|
|
<div class="w-full mx-auto max-w-[60rem]">
|
|
<slot name="default" />
|
|
</div>
|
|
</main>
|
|
<footer class="sticky bottom-0 z-0 px-4 pb-4">
|
|
<PaginationFooter
|
|
current-page-info="COMPANIES_LAYOUT.PAGINATION_FOOTER.SHOWING"
|
|
:current-page="currentPage"
|
|
:total-items="totalItems"
|
|
:items-per-page="25"
|
|
@update:current-page="updateCurrentPage"
|
|
/>
|
|
</footer>
|
|
</div>
|
|
</section>
|
|
</template>
|