22import  {SvgIcon } from  ' ../svg.ts'  ;
33import  {GET } from  ' ../modules/fetch.ts'  ;
44import  {getIssueColor , getIssueIcon } from  ' ../features/issue.ts'  ;
5- import  {computed , onMounted , shallowRef , useTemplateRef } from  ' vue'  ;
6- import  type  {IssuePathInfo } from  ' ../types.ts'  ;
5+ import  {computed , onMounted , shallowRef } from  ' vue'  ;
76
8- const   {appSubUrl, i18n} =  window .config ;
7+ const   props =  defineProps <{
8+   repoLink:  string , 
9+   loadIssueInfoUrl:  string , 
10+ }>(); 
911
1012const   loading =  shallowRef (false );
1113const   issue =  shallowRef (null );
1214const   renderedLabels =  shallowRef (' '  );
13- const   i18nErrorOccurred =  i18n .error_occurred ;
14- const   i18nErrorMessage =  shallowRef (null );
15+ const   errorMessage =  shallowRef (null );
1516
16- const   createdAt =  computed (() =>  new  Date (issue .value .created_at ).toLocaleDateString (undefined , {year: ' numeric'  , month: ' short'  , day: ' numeric'  }));
17- const   body =  computed (() =>  {
18-   const   body =  issue .value .body .replace (/ \n + / g  , '  '  ); 
19-   if  (body .length  >  85 ) { 
20-     return  ` ${body .substring (0 , 85 )}… ` ; 
21-   } 
22-   return  body ; 
17+ const   createdAt =  computed (() =>  {
18+   return  new  Date (issue .value .created_at ).toLocaleDateString (undefined , {year: ' numeric'  , month: ' short'  , day: ' numeric'  }); 
2319}); 
2420
25- const   root =  useTemplateRef (' root'  );
26- 
27- onMounted (() =>  {
28-   root .value .addEventListener (' ce-load-context-popup'  , (e :  CustomEventInit <IssuePathInfo >) =>  { 
29-     if  (! loading .value  &&  issue .value  ===  null ) { 
30-       load (e .detail ); 
31-     } 
32-   }); 
21+ const   body =  computed (() =>  {
22+   const   body =  issue .value .body .replace (/ \n + / g  , '  '  ); 
23+   return  body .length  >  85  ?  ` ${body .substring (0 , 85 )}… `  :  body ; 
3324}); 
3425
35- async  function  load( issuePathInfo :   IssuePathInfo )  {
26+ onMounted ( async  ()  =>  {
3627  loading .value  =  true ; 
37-   i18nErrorMessage .value  =  null ; 
38- 
28+   errorMessage .value  =  null ; 
3929  try  { 
40-     const   response =  await  GET (` ${appSubUrl }/${issuePathInfo .ownerName }/${issuePathInfo .repoName }/issues/${issuePathInfo .indexString }/info ` ); //  backend: GetIssueInfo 
41-     const   respJson =  await  response .json (); 
42-     if  (! response .ok ) { 
43-       i18nErrorMessage .value  =  respJson .message  ??  i18n .network_error ; 
30+     const   resp =  await  GET (props .loadIssueInfoUrl ); 
31+     if  (! resp .ok ) { 
32+       errorMessage .value  =  resp .status  ?  resp .statusText  :  ' Unknown network error'  ; 
4433      return ; 
4534    } 
35+     const   respJson =  await  resp .json (); 
4636    issue .value  =  respJson .convertedIssue ; 
4737    renderedLabels .value  =  respJson .renderedLabels ; 
48-   } catch  { 
49-     i18nErrorMessage .value  =  i18n .network_error ; 
5038  } finally  { 
5139    loading .value  =  false ; 
5240  } 
53- } 
41+ });  
5442 </script >
5543
5644<template >
57-   <div  ref = " root "  >
45+   <div  class = " tw-p-4 "  >
5846    <div  v-if =" loading"   class =" tw-h-12 tw-w-12 is-loading"  />
59-     <div  v-if =" !loading && issue !== null"   class =" tw-flex tw-flex-col tw-gap-2"  >
60-       <div  class =" tw-text-12"  >{{ issue.repository.full_name }} on {{ createdAt }}</div >
47+     <div  v-else-if =" issue"   class =" tw-flex tw-flex-col tw-gap-2"  >
48+       <div  class =" tw-text-12"  >
49+         <a  :href =" repoLink"   class =" muted"  >{{ issue.repository.full_name }}</a >
50+         on {{ createdAt }}
51+       </div >
6152      <div  class =" flex-text-block"  >
6253        <svg-icon  :name =" getIssueIcon(issue)"   :class =" ['text', getIssueColor(issue)]"  />
6354        <span  class =" issue-title tw-font-semibold tw-break-anywhere"  >
@@ -69,9 +60,8 @@ async function load(issuePathInfo: IssuePathInfo) {
6960      <!--  eslint-disable-next-line vue/no-v-html --> 
7061      <div  v-if =" issue.labels.length"   v-html =" renderedLabels"  />
7162    </div >
72-     <div  class =" tw-flex tw-flex-col tw-gap-2"   v-if =" !loading && issue === null"  >
73-       <div  class =" tw-text-12"  >{{ i18nErrorOccurred }}</div >
74-       <div >{{ i18nErrorMessage }}</div >
63+     <div  v-else >
64+       {{ errorMessage }}
7565    </div >
7666  </div >
7767</template >
0 commit comments