12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- import { computed } from 'vue'
- import { usePublicLinksQuery } from '#shared/entities/public-links/graphql/queries/links.api.ts'
- import { PublicLinkUpdatesDocument } from '#shared/entities/public-links/graphql/subscriptions/currentLinks.api.ts'
- import {
- EnumPublicLinksScreen,
- type PublicLinkUpdatesSubscriptionVariables,
- type PublicLinkUpdatesSubscription,
- type PublicLinksQuery,
- } from '#shared/graphql/types.ts'
- import QueryHandler from '#shared/server/apollo/handler/QueryHandler.ts'
- export const usePublicLinks = (screen: EnumPublicLinksScreen) => {
- const publicLinksQuery = new QueryHandler(usePublicLinksQuery({ screen }))
- publicLinksQuery.subscribeToMore<
- PublicLinkUpdatesSubscriptionVariables,
- PublicLinkUpdatesSubscription
- >({
- document: PublicLinkUpdatesDocument,
- variables: {
- screen,
- },
- updateQuery(_, { subscriptionData }) {
- const publicLinks = subscriptionData.data.publicLinkUpdates?.publicLinks
- // if we return empty array here, the actual query will be aborted, because we have fetchPolicy "cache-and-network"
- // if we return existing value, it will throw an error, because "publicLinks" doesn't exist yet on the query result
- if (!publicLinks) {
- return null as unknown as PublicLinksQuery
- }
- return {
- publicLinks,
- }
- },
- })
- const links = computed(() => {
- const publicLinks = publicLinksQuery.result()
- return publicLinks.value?.publicLinks || []
- })
- return { links }
- }
|