File tree Expand file tree Collapse file tree 5 files changed +99
-55
lines changed 
features/settings/SettingsUsers Expand file tree Collapse file tree 5 files changed +99
-55
lines changed Original file line number Diff line number Diff line change 1+ import  { 
2+   MessageBar , 
3+   MessageBarBody , 
4+   MessageBarActions , 
5+   Button , 
6+   MessageBarTitle , 
7+ }  from  "@fluentui/react-components" ; 
8+ import  {  DismissRegular  }  from  "@fluentui/react-icons" ; 
9+ import  {  useEffect  }  from  "react" ; 
10+ import  {  useSnapshot  }  from  "valtio" ; 
11+ 
12+ import  { 
13+   clearMessages , 
14+   dismissMessage , 
15+   Message , 
16+   messageStore , 
17+ }  from  "./messageStore" ; 
18+ 
19+ export  function  Banner ( )  { 
20+   const  snap  =  useSnapshot ( messageStore ) ; 
21+ 
22+   useEffect ( ( )  =>  { 
23+     return  clearMessages ( ) ; 
24+   } ,  [ ] ) ; 
25+ 
26+   if  ( ! snap . messages . length )  { 
27+     return  null ; 
28+   } 
29+ 
30+   return  snap . messages . map ( ( message )  =>  ( 
31+     < SingleBanner 
32+       key = { message . id } 
33+       message = { message } 
34+       onClick = { ( )  =>  dismissMessage ( message . id ) } 
35+     /> 
36+   ) ) ; 
37+ } 
38+ 
39+ export  function  SingleBanner ( { 
40+   message, 
41+   onClick, 
42+ } : { 
43+   message : Omit < Message ,  "id" > ; 
44+   onClick ?: ( )  =>  void ; 
45+ } )  { 
46+   return  ( 
47+     < MessageBar 
48+       intent = { message . intent } 
49+       role = { message . intent  ===  "error"  ? "alert"  : "status" } 
50+     > 
51+       < MessageBarBody > 
52+         < MessageBarTitle > { message . title } </ MessageBarTitle > 
53+         { message . text } 
54+       </ MessageBarBody > 
55+       < MessageBarActions 
56+         containerAction = { 
57+           < Button 
58+             aria-label = "dismiss" 
59+             appearance = "transparent" 
60+             icon = { < DismissRegular  /> } 
61+             onClick = { onClick } 
62+           /> 
63+         } 
64+       /> 
65+     </ MessageBar > 
66+   ) ; 
67+ } 
Original file line number Diff line number Diff line change 11import  {  MessageBarIntent  }  from  "@fluentui/react-components" ; 
22import  {  proxy  }  from  "valtio" ; 
33
4- interface  Message  { 
4+ export   interface  Message  { 
55  id : string ; 
6-   intent : MessageBarIntent ; 
7-   message : string ; 
6+   text : string ; 
7+   intent ?: MessageBarIntent ; 
8+   title ?: string ; 
89} 
910
1011export  const  messageStore  =  proxy < {  messages : Message [ ]  } > ( { 
1112  messages : [ ] , 
1213} ) ; 
1314
14- export  function  addMessage ( 
15-   intent : Message [ "intent" ] , 
16-   message : Message [ "message" ] , 
17- )  { 
18-   messageStore . messages . push ( { 
15+ export  function  addMessage ( message : Omit < Message ,  "id" > )  { 
16+   messageStore . messages . unshift ( { 
17+     ...message , 
1918    id : crypto . randomUUID ( ) , 
20-     intent, 
21-     message, 
2219  } ) ; 
2320} 
2421
Original file line number Diff line number Diff line change @@ -22,7 +22,10 @@ import {
2222}  from  "../Fields/validation" ; 
2323import  {  DismissRegular  }  from  "@fluentui/react-icons" ; 
2424import  {  UserAlreadyExistsError ,  UserRight  }  from  "../../../api/urbackupserver" ; 
25- import  {  addMessage ,  clearMessages  }  from  "./messageStore" ; 
25+ import  { 
26+   addMessage , 
27+   clearMessages , 
28+ }  from  "../../../components/Banner/messageStore" ; 
2629import  {  useUsers ,  type  UserInput  }  from  "./useUsers" ; 
2730
2831const  ADMIN_RIGHTS : UserRight [ ]  =  [ 
@@ -84,14 +87,20 @@ export const CreateUser = () => {
8487
8588  const  handleSuccess  =  ( )  =>  { 
8689    clearMessages ( ) ; 
87-     addMessage ( "success" ,  `New user successfully added.` ) ; 
90+     addMessage ( { 
91+       intent : "success" , 
92+       text : "New user successfully added." , 
93+     } ) ; 
8894
8995    setOpen ( false ) ; 
9096  } ; 
9197
9298  const  handleFailure  =  ( )  =>  { 
9399    clearMessages ( ) ; 
94-     addMessage ( "error" ,  `Failed to create new user.` ) ; 
100+     addMessage ( { 
101+       intent : "error" , 
102+       text : "Failed to create new user." , 
103+     } ) ; 
95104
96105    setOpen ( false ) ; 
97106  } ; 
Original file line number Diff line number Diff line change 1- import  {  useEffect  }  from  "react" ; 
2- 
31import  {  useSettings  }  from  "../useSettings" ; 
42import  {  UsersTable  }  from  "./UsersTable" ; 
53import  {  TableWrapper  }  from  "../../../components/TableWrapper" ; 
6- import  { 
7-   Button , 
8-   MessageBar , 
9-   MessageBarActions , 
10-   MessageBarBody , 
11- }  from  "@fluentui/react-components" ; 
124import  {  CreateUser  }  from  "./CreateUser" ; 
13- import  {  useSnapshot  }  from  "valtio" ; 
14- import  {  clearMessages ,  dismissMessage ,  messageStore  }  from  "./messageStore" ; 
15- import  {  DismissRegular  }  from  "@fluentui/react-icons" ; 
5+ import  {  Banner  }  from  "../../../components/Banner/Banner" ; 
166
177export  function  SettingsUsers ( )  { 
188  const  {  settings }  =  useSettings ( ) ; 
@@ -36,31 +26,3 @@ export function SettingsUsers() {
3626    </ div > 
3727  ) ; 
3828} 
39- 
40- function  Banner ( )  { 
41-   const  snap  =  useSnapshot ( messageStore ) ; 
42- 
43-   useEffect ( ( )  =>  { 
44-     return  clearMessages ( ) ; 
45-   } ,  [ ] ) ; 
46- 
47-   if  ( ! snap . messages . length )  { 
48-     return  null ; 
49-   } 
50- 
51-   return  snap . messages . map ( ( m )  =>  ( 
52-     < MessageBar  key = { m . id }  intent = { m . intent } > 
53-       < MessageBarBody > { m . message } </ MessageBarBody > 
54-       < MessageBarActions 
55-         containerAction = { 
56-           < Button 
57-             aria-label = "dismiss" 
58-             appearance = "transparent" 
59-             icon = { < DismissRegular  /> } 
60-             onClick = { ( )  =>  dismissMessage ( m . id ) } 
61-           /> 
62-         } 
63-       /> 
64-     </ MessageBar > 
65-   ) ) ; 
66- } 
Original file line number Diff line number Diff line change @@ -11,20 +11,29 @@ import {
1111
1212import  {  UserListItem  }  from  "../../../api/urbackupserver" ; 
1313import  {  useUsers  }  from  "./useUsers" ; 
14- import  {  addMessage ,  clearMessages  }  from  "./messageStore" ; 
14+ import  { 
15+   addMessage , 
16+   clearMessages , 
17+ }  from  "../../../components/Banner/messageStore" ; 
1518import  {  useState  }  from  "react" ; 
1619
1720export  function  UserTableActions ( user : UserListItem )  { 
1821  const  {  removeUser,  isRemovable }  =  useUsers ( ) ; 
1922
2023  const  handleSuccess  =  ( )  =>  { 
2124    clearMessages ( ) ; 
22-     addMessage ( "success" ,  "Successfully removed user." ) ; 
25+     addMessage ( { 
26+       intent : "success" , 
27+       text : "Successfully removed user." , 
28+     } ) ; 
2329  } ; 
2430
2531  const  handleFailure  =  ( )  =>  { 
2632    clearMessages ( ) ; 
27-     addMessage ( "error" ,  `Failed to remove user.` ) ; 
33+     addMessage ( { 
34+       intent : "error" , 
35+       text : "Failed to remove user." , 
36+     } ) ; 
2837  } ; 
2938
3039  const  handleRemove  =  ( )  =>  { 
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments