Skip to content

Commit 0cc6cd5

Browse files
fix: correctly filter clients and replace nextTick with until
1 parent 13daefa commit 0cc6cd5

File tree

7 files changed

+68
-39
lines changed

7 files changed

+68
-39
lines changed

packages/api/src/repositories/client.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ function find({
7171
pagination.descending ? 'desc' : 'asc'
7272
)
7373

74-
query = query.limit(pagination.limit).offset(pagination.offset)
74+
query = query
75+
.groupBy('clients.id')
76+
.limit(pagination.limit)
77+
.offset(pagination.offset)
7578
}
7679

77-
return query
78-
.$if(pagination !== void 0, (qb) =>
79-
qb.select((seb) =>
80-
seb.cast<number>(seb.fn.count('id').over(), 'integer').as('total')
81-
)
82-
)
83-
.select([...select])
80+
return query.select((seb) => [
81+
...select,
82+
seb.cast<number>(seb.fn.count('id'), 'integer').as('total')
83+
])
8484
}
8585

8686
export async function findClient({

packages/app/src/pages/admin/BillsPage/BillsPage.vue

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ export default {
108108
</script>
109109

110110
<script setup lang="ts">
111-
import { ref, nextTick, onMounted, computed, watch, inject } from 'vue'
111+
import { ref, onMounted, computed, watch, inject } from 'vue'
112112
import { ResourcePage, ResponsiveDialog } from '@simsustech/quasar-components'
113113
import { EmailInput, BooleanSelect } from '@simsustech/quasar-components/form'
114114
import InvoiceForm from '../../../components/invoice/InvoiceForm.vue'
@@ -142,6 +142,7 @@ import {
142142
} from '../../../queries/admin/invoices.js'
143143
import { useAdminSearchCompaniesQuery } from '../../../queries/admin/companies.js'
144144
import { useAdminSearchClientsQuery } from '../../../queries/admin/clients.js'
145+
import { until } from '@vueuse/core'
145146
146147
const bus = inject<EventBus>('bus')!
147148
bus.on('administrator-open-bills-create-dialog', () => {
@@ -198,11 +199,12 @@ const createDialogRef = ref<typeof ResponsiveDialog>()
198199
199200
const openUpdateDialog: InstanceType<
200201
typeof ResourcePage
201-
>['$props']['onUpdate'] = ({ data }) => {
202+
>['$props']['onUpdate'] = async ({ data }) => {
202203
updateDialogRef.value?.functions.open()
203-
nextTick(() => {
204-
updateInvoiceFormRef.value?.functions.setValue(data)
205-
})
204+
205+
await until(updateDialogRef).toBeTruthy()
206+
207+
updateInvoiceFormRef.value?.functions.setValue(data)
206208
}
207209
208210
const openCreateDialog: InstanceType<
@@ -477,6 +479,7 @@ const sendMutations = {
477479
const sendBill: InstanceType<
478480
typeof ResponsiveDialog
479481
>['$props']['onSubmit'] = async ({ done }) => {
482+
console.log(sendEmailType.value)
480483
try {
481484
await sendMutations[sendEmailType.value]({
482485
id: sendEmailId.value,
@@ -490,7 +493,9 @@ const sendBill: InstanceType<
490493
sendEmailSubject.value = ''
491494
sendEmailBody.value = ''
492495
execute()
493-
} catch (e) {}
496+
} catch (e) {
497+
console.error(e)
498+
}
494499
}
495500
496501
const onNewValueClients: QSelect['$props']['onNewValue'] = (input) => {

packages/app/src/pages/admin/ClientsPage/ClientsPage.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default {
8181
</script>
8282

8383
<script setup lang="ts">
84-
import { ref, nextTick, onMounted, computed, inject } from 'vue'
84+
import { ref, onMounted, computed, inject } from 'vue'
8585
import { ResourcePage, ResponsiveDialog } from '@simsustech/quasar-components'
8686
import ClientForm from '../../../components/client/ClientForm.vue'
8787
import ClientItem from '../../../components/client/ClientItem.vue'
@@ -95,6 +95,7 @@ import {
9595
useAdminUpdateClientMutation
9696
} from 'src/queries/admin/clients.js'
9797
import { useAdminSearchAccountsQuery } from 'src/queries/admin/accounts.js'
98+
import { until } from '@vueuse/core'
9899
99100
const bus = inject<EventBus>('bus')!
100101
bus.on('administrator-open-clients-create-dialog', () => {
@@ -130,11 +131,11 @@ const createDialogRef = ref<typeof ResponsiveDialog>()
130131
131132
const openUpdateDialog: InstanceType<
132133
typeof ResourcePage
133-
>['$props']['onUpdate'] = ({ data }) => {
134+
>['$props']['onUpdate'] = async ({ data }) => {
134135
updateDialogRef.value?.functions.open()
135-
nextTick(() => {
136-
updateClientFormRef.value?.functions.setValue(data)
137-
})
136+
await until(updateDialogRef).toBeTruthy()
137+
138+
updateClientFormRef.value?.functions.setValue(data)
138139
}
139140
140141
const openCreateDialog: InstanceType<

packages/app/src/pages/admin/InvoicesPage/InvoicesPage.vue

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@
6262
@submit="update"
6363
>
6464
<invoice-form
65+
v-if="
66+
filteredCompanies &&
67+
filteredClients &&
68+
filteredCompaniesAsyncStatus === 'idle' &&
69+
filteredClientsAsyncStatus === 'idle'
70+
"
6571
ref="updateInvoiceFormRef"
6672
:filtered-companies="filteredCompanies"
6773
:filtered-clients="filteredClients"
@@ -79,6 +85,12 @@
7985
@submit="create"
8086
>
8187
<invoice-form
88+
v-if="
89+
filteredCompanies &&
90+
filteredClients &&
91+
filteredCompaniesAsyncStatus === 'idle' &&
92+
filteredClientsAsyncStatus === 'idle'
93+
"
8294
ref="createInvoiceFormRef"
8395
:filtered-companies="filteredCompanies"
8496
:filtered-clients="filteredClients"
@@ -110,7 +122,7 @@ export default {
110122
</script>
111123

112124
<script setup lang="ts">
113-
import { ref, nextTick, onMounted, computed, watch, inject } from 'vue'
125+
import { ref, onMounted, computed, watch, inject } from 'vue'
114126
import { ResourcePage, ResponsiveDialog } from '@simsustech/quasar-components'
115127
import { EmailInput } from '@simsustech/quasar-components/form'
116128
import InvoiceForm from '../../../components/invoice/InvoiceForm.vue'
@@ -145,6 +157,7 @@ import {
145157
import { useAdminSearchCompaniesQuery } from 'src/queries/admin/companies.js'
146158
import { useAdminSearchClientsQuery } from 'src/queries/admin/clients.js'
147159
import { useAdminGetInvoiceEventsByInvoiceIdsQuery } from 'src/queries/admin/invoiceEvents'
160+
import { until } from '@vueuse/core'
148161
149162
const bus = inject<EventBus>('bus')!
150163
bus.on('administrator-open-invoices-create-dialog', () => {
@@ -224,11 +237,17 @@ const createDialogRef = ref<typeof ResponsiveDialog>()
224237
225238
const openUpdateDialog: InstanceType<
226239
typeof ResourcePage
227-
>['$props']['onUpdate'] = ({ data }) => {
240+
>['$props']['onUpdate'] = async ({ data }) => {
241+
// @ts-expect-error untyped
242+
companiesSearchPhrase.value = data?.companyDetails?.name
243+
clientName.value =
244+
// @ts-expect-error untyped
245+
data?.clientDetails?.contactPersonName ?? data?.clientDetails?.companyName
246+
228247
updateDialogRef.value?.functions.open()
229-
nextTick(() => {
230-
updateInvoiceFormRef.value?.functions.setValue(data)
231-
})
248+
249+
await until(updateInvoiceFormRef).toBeTruthy()
250+
updateInvoiceFormRef.value?.functions.setValue(data)
232251
}
233252
234253
const openCreateDialog: InstanceType<
@@ -282,30 +301,30 @@ const createInvoice: InstanceType<
282301
const {
283302
companies: filteredCompanies,
284303
searchPhrase: companiesSearchPhrase,
285-
refetch: refetchFilteredCompanies
304+
refetch: refetchFilteredCompanies,
305+
asyncStatus: filteredCompaniesAsyncStatus
286306
} = useAdminSearchCompaniesQuery()
287307
288308
// const filteredCompanies = ref<CompanyDetails[]>([])
289309
const onFilterCompanies: InstanceType<
290310
typeof InvoiceForm
291311
>['$props']['onFilter:companies'] = async ({ searchPhrase, done }) => {
292312
companiesSearchPhrase.value = searchPhrase
293-
await refetchFilteredCompanies()
294313
295314
if (done) done()
296315
}
297316
298317
const {
299318
clients: filteredClients,
300319
name: clientName,
301-
refetch: refetchFilteredClients
320+
refetch: refetchFilteredClients,
321+
asyncStatus: filteredClientsAsyncStatus
302322
} = useAdminSearchClientsQuery()
303323
// const filteredClients = ref<ClientDetails>([])
304324
const onFilterClients: InstanceType<
305325
typeof InvoiceForm
306326
>['$props']['onFilter:clients'] = async ({ searchPhrase, done }) => {
307327
clientName.value = searchPhrase
308-
await refetchFilteredClients()
309328
310329
if (done) done()
311330
}

packages/app/src/pages/admin/SubscriptionsPage/SubscriptionsPage.vue

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export default {
9999
</script>
100100

101101
<script setup lang="ts">
102-
import { ref, nextTick, onMounted, computed, inject } from 'vue'
102+
import { ref, onMounted, computed, inject } from 'vue'
103103
import { ResourcePage, ResponsiveDialog } from '@simsustech/quasar-components'
104104
import SubscriptionForm from '../../../components/subscription/SubscriptionForm.vue'
105105
import { useLang } from '../../../lang/index.js'
@@ -120,6 +120,7 @@ import {
120120
import { useAdminSearchClientsQuery } from 'src/queries/admin/clients.js'
121121
import { useAdminSearchCompaniesQuery } from 'src/queries/admin/companies.js'
122122
import { useAdminGetNumberPrefixesQuery } from 'src/queries/admin/numberPrefixes.js'
123+
import { until } from '@vueuse/core'
123124
124125
const bus = inject<EventBus>('bus')!
125126
bus.on('administrator-open-subscriptions-create-dialog', () => {
@@ -154,11 +155,12 @@ const createDialogRef = ref<typeof ResponsiveDialog>()
154155
155156
const openUpdateDialog: InstanceType<
156157
typeof ResourcePage
157-
>['$props']['onUpdate'] = ({ data }) => {
158+
>['$props']['onUpdate'] = async ({ data }) => {
158159
updateDialogRef.value?.functions.open()
159-
nextTick(() => {
160-
updateSubscriptionFormRef.value?.functions.setValue(data)
161-
})
160+
161+
await until(updateDialogRef).toBeTruthy()
162+
163+
updateSubscriptionFormRef.value?.functions.setValue(data)
162164
}
163165
164166
const openCreateDialog: InstanceType<

packages/app/src/pages/admin/settings/CompaniesPage/CompaniesPage.vue

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default {
4646
</script>
4747

4848
<script setup lang="ts">
49-
import { ref, nextTick, onMounted, inject } from 'vue'
49+
import { ref, onMounted, inject } from 'vue'
5050
import { ResourcePage, ResponsiveDialog } from '@simsustech/quasar-components'
5151
import CompanyForm from '../../../../components/company/CompanyForm.vue'
5252
import CompanyCard from '../../../../components/company/CompanyCard.vue'
@@ -58,6 +58,7 @@ import {
5858
useAdminUpdateCompanyMutation
5959
} from 'src/queries/admin/companies.js'
6060
import { useAdminGetNumberPrefixesQuery } from 'src/queries/admin/numberPrefixes.js'
61+
import { until } from '@vueuse/core'
6162
6263
const bus = inject<EventBus>('bus')!
6364
bus.on('administrator-open-companies-create-dialog', () => {
@@ -80,11 +81,11 @@ const createDialogRef = ref<typeof ResponsiveDialog>()
8081
8182
const openUpdateDialog: InstanceType<
8283
typeof ResourcePage
83-
>['$props']['onUpdate'] = ({ data }) => {
84+
>['$props']['onUpdate'] = async ({ data }) => {
8485
updateDialogRef.value?.functions.open()
85-
nextTick(() => {
86-
updateCompanyFormRef.value?.functions.setValue(data)
87-
})
86+
await until(updateDialogRef).toBeTruthy()
87+
88+
updateCompanyFormRef.value?.functions.setValue(data)
8889
}
8990
9091
const openCreateDialog: InstanceType<

packages/app/src/queries/admin/clients.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export const useAdminSearchClientsQuery = defineQuery(() => {
2020
}))
2121

2222
const { data: clients, ...rest } = useQuery({
23-
enabled: () => !import.meta.env.SSR,
23+
enabled: () =>
24+
!import.meta.env.SSR && name.value !== '' && name.value !== null,
2425
key: () => ['adminSearchClients', name.value, pagination.value],
2526
query: () =>
2627
trpc.admin.searchClients.query({

0 commit comments

Comments
 (0)