1- import { $ , component$ , useClientEffect$ , useContext , useTask$ } from '@builder.io/qwik' ;
1+ import { $ , component$ , useContext , useTask$ } from '@builder.io/qwik' ;
22import { PullRequestIssueTab } from '../pull-request-issue-tab/pull-request-issue-tab' ;
33import { sortOptions } from './data' ;
44import { useQuery } from '../../utils' ;
55import { ISSUES_QUERY } from '../../utils/queries/issues-query' ;
66import { AUTH_TOKEN , DEFAULT_PAGE_SIZE , GITHUB_GRAPHQL } from '../../utils/constants' ;
77import IssuesData from './issues-data' ;
8- import { IssueOrderField , Milestone , OrderDirection , ParsedIssueQuery } from './type' ;
8+ import { ParsedIssueQuery } from './type' ;
99import { isBrowser } from '@builder.io/qwik/build' ;
1010import { parseQuery } from './parseQuery' ;
11- import { Label } from '../repo-pulls/types' ;
1211import { ClearFilterAndSortBtn } from '../clear-filter-and-sort-button' ;
1312import { useLocation , useNavigate } from '@builder.io/qwik-city' ;
1413import IssuesPRContext , { IssuesPRContextProps } from '../../context/issue-pr-store' ;
1514import DropdownContext from '../../context/issue-tab-header-dropdown' ;
1615import { Pagination } from '../pagination/pagination' ;
16+ import { OrderDirection , OrderField } from '~/utils/types' ;
1717
1818export interface IssuesProps {
1919 owner : string ;
@@ -29,7 +29,7 @@ interface IssuesQueryParams {
2929 before ?: string ;
3030 orderBy : string ;
3131 direction : string ;
32- filterBy : { milestone ?: string ; labels : string [ ] | undefined } ;
32+ filterBy : { milestone ?: string ; milestoneNumber ?: string ; labels : string [ ] | undefined } ;
3333}
3434
3535export const IssueTabView = component$ ( ( { owner, name } : IssuesProps ) => {
@@ -38,9 +38,6 @@ export const IssueTabView = component$(({ owner, name }: IssuesProps) => {
3838 const issuesStore = useContext ( IssuesPRContext ) ;
3939 const dropdownStore = useContext ( DropdownContext ) ;
4040
41- const afterCursor = typeof location . query . after === 'string' ? location . query . after : undefined ;
42- const beforeCursor = typeof location . query . before === 'string' ? location . query . before : undefined ;
43-
4441 const hasActiveFilter =
4542 dropdownStore . selectedLabel ||
4643 dropdownStore . selectedSort !== sortOptions [ 0 ] . value ||
@@ -50,65 +47,44 @@ export const IssueTabView = component$(({ owner, name }: IssuesProps) => {
5047 dropdownStore . selectedLabel = undefined ;
5148 dropdownStore . selectedMilestones = undefined ;
5249 dropdownStore . selectedSort = sortOptions [ 0 ] . value ;
50+ dropdownStore . selectedMilestoneNumber = undefined ;
5351 navigate . path = `${ location . pathname } ?tab=${ issuesStore . activeTab } ` ;
5452 } ) ;
5553
56- useClientEffect$ ( async ( ) => {
57- const abortController = new AbortController ( ) ;
58- issuesStore . loading = true ;
59- const response = await fetchRepoIssues (
60- {
61- owner,
62- name,
63- after : afterCursor ,
64- before : beforeCursor ,
65- first : afterCursor || ! beforeCursor ? DEFAULT_PAGE_SIZE : undefined ,
66- last : beforeCursor ? DEFAULT_PAGE_SIZE : undefined ,
67- orderBy : IssueOrderField . CreatedAt ,
68- direction : OrderDirection . Desc ,
69- filterBy : {
70- milestone : dropdownStore . selectedMilestones ,
71- labels : dropdownStore . selectedLabel ? [ dropdownStore . selectedLabel ] : undefined ,
72- } ,
73- } ,
74- abortController
75- ) ;
76-
77- updateIssueState ( issuesStore , parseQuery ( response ) ) ;
78- } ) ;
79-
80- useTask$ ( async ( { track } ) => {
81- const abortController = new AbortController ( ) ;
82- issuesStore . loading = true ;
83- const after = track ( ( ) => location . query . after ) ;
84- const before = track ( ( ) => location . query . before ) ;
85- track ( ( ) => issuesStore . activeTab ) ;
86- track ( ( ) => dropdownStore . selectedSort ) ;
87- track ( ( ) => dropdownStore . selectedMilestones ) ;
88- track ( ( ) => dropdownStore . selectedLabel ) ;
54+ useTask$ (
55+ async ( { track } ) => {
56+ const abortController = new AbortController ( ) ;
57+ issuesStore . loading = true ;
58+ const after = track ( ( ) => location . query . after ) ;
59+ const before = track ( ( ) => location . query . before ) ;
60+ track ( ( ) => dropdownStore . selectedSort ) ;
61+ track ( ( ) => dropdownStore . selectedMilestones ) ;
62+ track ( ( ) => dropdownStore . selectedLabel ) ;
8963
90- if ( isBrowser ) {
91- const response = await fetchRepoIssues (
92- {
93- owner,
94- name,
95- after,
96- before,
97- first : location . query . after || ! location . query . before ? DEFAULT_PAGE_SIZE : undefined ,
98- last : location . query . before ? DEFAULT_PAGE_SIZE : undefined ,
99- orderBy : dropdownStore . selectedSort . split ( '^' ) [ 0 ] ,
100- direction : dropdownStore . selectedSort . split ( '^' ) [ 1 ] ,
101- filterBy : {
102- milestone : dropdownStore . selectedMilestones ,
103- labels : dropdownStore . selectedLabel ? [ dropdownStore . selectedLabel ] : undefined ,
64+ if ( isBrowser ) {
65+ const response = await fetchRepoIssues (
66+ {
67+ owner,
68+ name,
69+ after,
70+ before,
71+ first : location . query . after || ! location . query . before ? DEFAULT_PAGE_SIZE : undefined ,
72+ last : location . query . before ? DEFAULT_PAGE_SIZE : undefined ,
73+ orderBy : dropdownStore . selectedSort . split ( '^' ) [ 0 ] || OrderField . CreatedAt ,
74+ direction : dropdownStore . selectedSort . split ( '^' ) [ 1 ] || OrderDirection . Desc ,
75+ filterBy : {
76+ milestoneNumber : dropdownStore . selectedMilestoneNumber ,
77+ labels : dropdownStore . selectedLabel ? [ dropdownStore . selectedLabel ] : undefined ,
78+ } ,
10479 } ,
105- } ,
106- abortController
107- ) ;
80+ abortController
81+ ) ;
10882
109- updateIssueState ( issuesStore , parseQuery ( response ) ) ;
110- }
111- } ) ;
83+ updateIssueState ( issuesStore , parseQuery ( response ) ) ;
84+ }
85+ } ,
86+ { eagerness : 'load' }
87+ ) ;
11288
11389 return (
11490 < >
@@ -159,8 +135,8 @@ export function updateIssueState(store: IssuesPRContextProps, response: ParsedIs
159135 store . openIssues = openIssues . issues ;
160136 store . closedIssuesCount = closedIssues . totalCount ;
161137 store . openIssuesCount = openIssues . totalCount ;
162- store . issuesLabel = labels . map ( ( lab : Label ) => ( { label : lab . name , value : lab . name } ) ) ;
163- store . milestones = milestones . map ( ( milestone : Milestone ) => ( { value : milestone . id , label : milestone . title } ) ) ;
138+ store . issuesLabel = store . issuesLabel . length ? store . issuesLabel : labels ;
139+ store . milestones = store . milestones . length ? store . milestones : milestones ;
164140 store . openPageInfo = openIssues . pageInfo ;
165141 store . closedPageInfo = closedIssues . pageInfo ;
166142 store . loading = false ;
@@ -169,7 +145,7 @@ export function updateIssueState(store: IssuesPRContextProps, response: ParsedIs
169145export async function fetchRepoIssues (
170146 { owner, name, first, last, after, before, orderBy, direction, filterBy } : IssuesQueryParams ,
171147 abortController ?: AbortController
172- ) : Promise < any > {
148+ ) {
173149 const { executeQuery$ } = useQuery ( ISSUES_QUERY ) ;
174150 const resp = await executeQuery$ ( {
175151 signal : abortController ?. signal ,
0 commit comments