1- import { MD , MultiSelect , Skeleton } from '@appquality/unguess-design-system' ;
1+ import { MD , Skeleton , MultiSelect } from '@appquality/unguess-design-system' ;
22import { useTranslation } from 'react-i18next' ;
33import {
44 Bug ,
@@ -31,25 +31,11 @@ export default ({
3131 campaignId : number ;
3232} ) => {
3333 const { t } = useTranslation ( ) ;
34+ const [ options , setOptions ] = useState < { id : number ; label : string } [ ] > ( [ ] ) ;
3435 const currentBugId = getSelectedBugId ( ) ;
3536 const { tags : bugTags } = bug ;
3637 const [ patchBug ] = usePatchCampaignsByCidBugsAndBidMutation ( ) ;
3738
38- const [ selectedTags , setSelectedTags ] = useState <
39- { id : number ; label : string } [ ]
40- > ( [ ] ) ;
41-
42- useEffect ( ( ) => {
43- if ( bugTags ) {
44- setSelectedTags (
45- bugTags . map ( ( tag ) => ( {
46- id : tag . tag_id ,
47- label : tag . name ,
48- } ) )
49- ) ;
50- }
51- } , [ bugTags ] ) ;
52-
5339 const {
5440 isLoading : isLoadingCampaign ,
5541 isFetching : isFetchingCampaign ,
@@ -59,6 +45,20 @@ export default ({
5945 cid : campaignId ?. toString ( ) ?? '0' ,
6046 } ) ;
6147
48+ useEffect ( ( ) => {
49+ if ( cpTags ) {
50+ setOptions (
51+ cpTags . map ( ( tag ) => ( {
52+ id : tag . tag_id ,
53+ label : tag . display_name ,
54+ selected : bugTags
55+ ? bugTags . some ( ( selectedTag ) => selectedTag . tag_id === tag . tag_id )
56+ : false ,
57+ } ) )
58+ ) ;
59+ }
60+ } , [ cpTags , bugTags ] ) ;
61+
6262 if ( isErrorCampaign ) return null ;
6363
6464 return (
@@ -77,19 +77,21 @@ export default ({
7777 maxItems = { 4 }
7878 size = "small"
7979 i18n = { { } }
80- onChange = { async ( selectedItems , newItem ) => {
80+ onChange = { async ( selectedItems , newLabel ) => {
8181 const { tags } = await patchBug ( {
8282 cid : campaignId . toString ( ) ,
8383 bid : currentBugId ? currentBugId . toString ( ) : '0' ,
8484 body : {
8585 tags : [
86- ...selectedItems . map ( ( item ) => ( {
87- tag_id : Number ( item . id ) ,
88- } ) ) ,
89- ...( newItem
86+ ...selectedItems
87+ . filter ( ( o ) => o . selected )
88+ . map ( ( item ) => ( {
89+ tag_id : Number ( item . id ) ,
90+ } ) ) ,
91+ ...( newLabel
9092 ? [
9193 {
92- tag_name : newItem ,
94+ tag_name : newLabel ,
9395 } ,
9496 ]
9597 : [ ] ) ,
@@ -103,19 +105,15 @@ export default ({
103105 label : tag . tag_name ,
104106 } ) )
105107 : [ ] ;
106-
107- setSelectedTags ( results ) ;
108- return results ;
108+ const unselectedItems = options . filter (
109+ ( o ) => ! results . find ( ( r ) => r . id === o . id )
110+ ) ;
111+ setOptions ( [
112+ ...unselectedItems ,
113+ ...results . map ( ( r ) => ( { ...r , selected : true } ) ) ,
114+ ] ) ;
109115 } }
110- options = {
111- cpTags
112- ? cpTags . map ( ( tag ) => ( {
113- id : tag . tag_id ,
114- label : tag . display_name ,
115- } ) )
116- : [ ]
117- }
118- selectedItems = { selectedTags }
116+ options = { options }
119117 />
120118 ) }
121119 </ Container >
0 commit comments