Browse Source

Fix: Mobile - Fix links to organization tickets

Vladimir Sheremet 2 years ago
parent
commit
f2175ebf1b

+ 14 - 4
app/frontend/apps/mobile/components/CommonTicketStateList/CommonTicketStateList.vue

@@ -2,6 +2,7 @@
 
 <script setup lang="ts">
 import { TicketState } from '@shared/entities/ticket/types'
+import { replaceTags } from '@shared/utils/formatter'
 import CommonSectionMenu from '../CommonSectionMenu/CommonSectionMenu.vue'
 import CommonSectionMenuLink from '../CommonSectionMenu/CommonSectionMenuLink.vue'
 
@@ -9,10 +10,19 @@ interface Props {
   createLink?: string
   createLabel?: string
   counts: Record<TicketState.Closed | TicketState.Open, number>
-  ticketsLink(state: TicketState.Closed | TicketState.Open): string
+  ticketsLinkQuery: string
 }
 
-defineProps<Props>()
+const props = defineProps<Props>()
+
+const getTicketsLink = (stateIds: number[]) => {
+  const states = stateIds
+    .map((stateId) => `state.state_type_id: ${stateId}`)
+    .join(' OR ')
+  return replaceTags(`/search/ticket?search=(${states}) AND #{query}`, {
+    query: props.ticketsLinkQuery,
+  })
+}
 </script>
 
 <template>
@@ -20,14 +30,14 @@ defineProps<Props>()
     <CommonSectionMenuLink
       :icon="{ name: 'state-open', size: 'base', class: 'text-yellow' }"
       :information="counts[TicketState.Open]"
-      :link="ticketsLink(TicketState.Open)"
+      :link="getTicketsLink([1, 2, 3, 4])"
     >
       {{ $t('open') }}
     </CommonSectionMenuLink>
     <CommonSectionMenuLink
       :icon="{ name: 'state-closed', size: 'base', class: 'text-green' }"
       :information="counts[TicketState.Closed]"
-      :link="ticketsLink(TicketState.Closed)"
+      :link="getTicketsLink([5])"
     >
       {{ $t('closed') }}
     </CommonSectionMenuLink>

+ 10 - 4
app/frontend/apps/mobile/components/CommonTicketStateList/__tests__/CommonTicketStateList.spec.ts

@@ -12,7 +12,7 @@ describe('show tickets', () => {
           [TicketState.Closed]: 1,
           [TicketState.Open]: 3,
         },
-        ticketsLink: (state: TicketState) => `/tickets?state=${state}`,
+        ticketsLinkQuery: `organization.name: "name"`,
       },
       router: true,
       store: true,
@@ -20,11 +20,17 @@ describe('show tickets', () => {
 
     const links = view.getAllByRole('link')
 
-    expect(links[0]).toHaveAttribute('href', '/tickets?state=open')
+    expect(links[0]).toHaveAttribute(
+      'href',
+      '/search/ticket?search=(state.state_type_id: 1 OR state.state_type_id: 2 OR state.state_type_id: 3 OR state.state_type_id: 4) AND organization.name: "name"',
+    )
     expect(links[0]).toHaveTextContent('open')
     expect(links[0]).toHaveTextContent('3')
 
-    expect(links[1]).toHaveAttribute('href', '/tickets?state=closed')
+    expect(links[1]).toHaveAttribute(
+      'href',
+      '/search/ticket?search=(state.state_type_id: 5) AND organization.name: "name"',
+    )
     expect(links[1]).toHaveTextContent('closed')
     expect(links[1]).toHaveTextContent('1')
   })
@@ -36,7 +42,7 @@ describe('show tickets', () => {
           [TicketState.Closed]: 1,
           [TicketState.Open]: 3,
         },
-        ticketsLink: (state: TicketState) => `/tickets?state=${state}`,
+        ticketsLinkQuery: `organization.name: "name"`,
         createLabel: 'Create ticket',
         createLink: '/tickets/create',
       },

+ 2 - 2
app/frontend/apps/mobile/modules/organization/__tests__/view-organization.spec.ts

@@ -47,11 +47,11 @@ describe('static organization', () => {
 
     expect(openTickets).toHaveAttribute(
       'href',
-      '/search/ticket?state=open&organization_id=1vs2dr3041dsa9',
+      expect.stringContaining('organization.name: "Some Organization"'),
     )
     expect(closedTickets).toHaveAttribute(
       'href',
-      '/search/ticket?state=closed&organization_id=1vs2dr3041dsa9',
+      expect.stringContaining('organization.name: "Some Organization"'),
     )
 
     await mockSubscription.next({

+ 5 - 4
app/frontend/apps/mobile/modules/organization/views/OrganizationDetailView.vue

@@ -85,6 +85,10 @@ const loadAllMembers = () => {
     membersCount: null,
   })
 }
+
+const ticketsLinkQuery = computed(() => {
+  return `organization.name: "${organization.value?.name}"`
+})
 </script>
 
 <template>
@@ -116,10 +120,7 @@ const loadAllMembers = () => {
       :create-link="`/tickets/create?organization_id=${organization.id}`"
       :create-label="__('Create new ticket for this organization')"
       :counts="organization.ticketsCount"
-      :tickets-link="
-        (state) =>
-          `/search/ticket?state=${state}&organization_id=${organization?.id}`
-      "
+      :tickets-link-query="ticketsLinkQuery"
     />
   </div>
   <CommonLoader