diff --git a/frontend/src/views/apps/CompaniesApp.vue b/frontend/src/views/apps/CompaniesApp.vue index 46176eb..3e2de93 100644 --- a/frontend/src/views/apps/CompaniesApp.vue +++ b/frontend/src/views/apps/CompaniesApp.vue @@ -11,6 +11,7 @@ import { kChip, kDialog, kDialogButton, + kGlass, kIcon, kLink, kList, @@ -41,7 +42,6 @@ import { BriefcaseBusiness, Building2, Check, - CheckCircle2, CircleAlert, ClipboardList, Clock3, @@ -62,7 +62,15 @@ import { UsersRound, X, } from 'lucide-vue-next' -import { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue' +import { + computed, + nextTick, + onBeforeUnmount, + onMounted, + reactive, + ref, + watch, +} from 'vue' import { useRoute, useRouter } from 'vue-router' import { useCallsStore } from '@/stores/calls' @@ -82,7 +90,6 @@ import type { CompanyRequestSummary, CompanyService, CompanySummary, - CompanyWorkFilter, } from '@/types/companies' import type { PhoneMedia } from '@/types/media' import { nuiCall } from '@/utils/nui' @@ -132,14 +139,9 @@ const screen = ref('root') const requestOrigin = ref('customer') const search = ref('') const selectedCategory = ref(null) -const onlyAvailable = ref(false) -const onlyWithLocation = ref(false) -const onlyAcceptingRequests = ref(false) -const directorySort = ref('relevance') const requestList = ref('open') -const workFilter = ref('new') const requestSheetOpened = ref(false) -const requestConfirmOpened = ref(false) +const requestSheetContent = ref(null) const requestServiceId = ref('') const requestSubject = ref('') const requestDescription = ref('') @@ -170,23 +172,18 @@ let searchTimer: ReturnType | undefined let toastTimer: ReturnType | undefined const directoryFilters = computed(() => ({ - acceptsRequests: onlyAcceptingRequests.value, - availability: onlyAvailable.value ? 'available' : null, + acceptsRequests: false, + availability: null, categoryId: selectedCategory.value, - hasLocation: onlyWithLocation.value, + hasLocation: false, search: search.value.trim(), - sort: directorySort.value, + sort: 'relevance', })) const availableCompanies = computed(() => companies.directory.filter((company) => company.availability === 'available'), ) const filtersActive = computed( - () => - Boolean(search.value.trim()) || - Boolean(selectedCategory.value) || - onlyAvailable.value || - onlyWithLocation.value || - onlyAcceptingRequests.value, + () => Boolean(search.value.trim()) || Boolean(selectedCategory.value), ) const activeCompany = computed(() => companies.company) const workCompany = computed(() => companies.workContext?.company ?? null) @@ -196,11 +193,6 @@ const managerLogoUrl = computed( const managerCoverUrl = computed( () => selectedCoverMedia.value?.url ?? workCompany.value?.coverUrl ?? null, ) -const selectedService = computed(() => - activeCompany.value?.services.find( - (service) => service.id === requestServiceId.value, - ), -) const requestProgress = computed(() => { if (!requestServiceId.value) return 0.25 if (!requestSubject.value.trim() || !requestDescription.value.trim()) @@ -237,13 +229,6 @@ const availabilityValues: CompanyAvailability[] = [ 'busy', 'closed', ] -const workFilters: CompanyWorkFilter[] = [ - 'new', - 'assigned', - 'in_progress', - 'waiting_customer', - 'completed', -] const weekdayKeys = [ 'monday', 'tuesday', @@ -384,14 +369,6 @@ function requestSubtitle(request: CompanyRequestSummary): string { return parts.join(' ยท ') } -function assignmentLabel( - value: CompanyRequestSummary['assignedLabel'], -): string { - return value - ? phone.t(`Apps.companies.assignmentLabels.${value}`) - : phone.t('Apps.companies.work.unassigned') -} - function messageAuthorLabel(value: 'company' | 'customer' | 'you'): string { return phone.t(`Apps.companies.messageAuthors.${value}`) } @@ -416,10 +393,6 @@ function eventLabel(event: CompanyRequestEvent): string { function resetDirectoryFilters(): void { search.value = '' selectedCategory.value = null - onlyAvailable.value = false - onlyWithLocation.value = false - onlyAcceptingRequests.value = false - directorySort.value = 'relevance' void companies.loadCompanies(directoryFilters.value) } @@ -442,12 +415,7 @@ async function selectTab(tab: CompaniesTab): Promise { await companies.loadCompanies(directoryFilters.value) } if (tab === 'requests') await companies.loadMyRequests(requestList.value) - if (tab === 'work') { - const loaded = await companies.loadWorkContext() - if (loaded && companies.workContext?.authorized) { - await companies.loadWorkQueue(workFilter.value) - } - } + if (tab === 'work') await companies.loadWorkContext() } async function openCompany(companyId: string): Promise { @@ -576,7 +544,6 @@ async function submitRequest(): Promise { serviceId: requestServiceId.value, subject: requestSubject.value.trim(), }) - requestConfirmOpened.value = false if (!response.success || !response.data?.request) { if (response.error === 'revision_conflict') conflictDialogOpened.value = true @@ -933,24 +900,15 @@ async function reloadConflict(): Promise { } watch(search, queueDirectoryLoad) -watch( - [ - selectedCategory, - onlyAvailable, - onlyWithLocation, - onlyAcceptingRequests, - directorySort, - ], - () => void companies.loadCompanies(directoryFilters.value), -) +watch(selectedCategory, () => companies.loadCompanies(directoryFilters.value)) watch(requestList, () => { if (activeTab.value === 'requests') void companies.loadMyRequests(requestList.value) }) -watch(workFilter, () => { - if (activeTab.value === 'work' && companies.workContext?.authorized) { - void companies.loadWorkQueue(workFilter.value) - } +watch(requestSheetOpened, async (opened) => { + if (!opened) return + await nextTick() + requestSheetContent.value?.scrollTo({ top: 0 }) }) watch( () => route.query.requestId, @@ -1098,50 +1056,21 @@ onBeforeUnmount(() => { - - - - - - - - - - - -
+ {{ phone.t('Apps.companies.loading.directory') }} -
-
+ + {{ phone.t('Apps.companies.states.directoryError') }}

{{ errorText(companies.directoryError) }}

@@ -1149,8 +1078,13 @@ onBeforeUnmount(() => { {{ phone.t('Apps.companies.tryAgain') }} -
-
+ + {{ @@ -1173,9 +1107,9 @@ onBeforeUnmount(() => { {{ phone.t('Apps.companies.directory.resetFilters') }} -
+