1+ @using FormBuilder .Models
2+
3+ <RadzenTabs @bind-SelectedIndex =" @selectedIndex" >
4+ <Tabs >
5+ <RadzenTabsItem Text =" Success messages" >
6+ <RadzenText TextStyle =" TextStyle.Subtitle1" >Success messages</RadzenText >
7+ <hr />
8+ <RadzenDataGrid Data =" @GetGroupedTranslations(SuccessMessageTranslations)" >
9+ <Columns >
10+ <RadzenDataGridColumn Property =" Key" Title =" Code" ></RadzenDataGridColumn >
11+ <RadzenDataGridColumn Title =" Translations" >
12+ <Template Context =" data" >
13+ <RadzenStack >
14+ @foreach ( var language in AllSupportedLanguages )
15+ {
16+ <RadzenRow >
17+ <RadzenColumn Size =" 6" >
18+ <RadzenTextBox Disabled =true Value =" @language" ></RadzenTextBox >
19+ </RadzenColumn >
20+ <RadzenColumn Size =" 6" >
21+ <RadzenTextBox Value =" @GetTranslation(language, data.Key, SuccessMessageTranslations)" ValueChanged =" @((newValue) => UpdateTranslation(language, data.Key, SuccessMessageTranslations, newValue, SuccessMessageTranslationsChanged))" ></RadzenTextBox >
22+ </RadzenColumn >
23+ </RadzenRow >
24+ }
25+ </RadzenStack >
26+ </Template >
27+ </RadzenDataGridColumn >
28+ </Columns >
29+ </RadzenDataGrid >
30+ </RadzenTabsItem >
31+ <RadzenTabsItem Text =" Error messages" >
32+ <RadzenText TextStyle =" TextStyle.Subtitle1" >Error messages</RadzenText >
33+ <hr />
34+ <RadzenDataGrid Data =" @GetGroupedTranslations(ErrorMessageTranslations)" >
35+ <Columns >
36+ <RadzenDataGridColumn Property =" Key" Title =" Code" ></RadzenDataGridColumn >
37+ <RadzenDataGridColumn Title =" Translations" >
38+ <Template Context =" data" >
39+ <RadzenStack >
40+ @foreach ( var language in AllSupportedLanguages )
41+ {
42+ <RadzenRow >
43+ <RadzenColumn Size =" 2" >
44+ <RadzenLabel >@language </RadzenLabel >
45+ </RadzenColumn >
46+ <RadzenColumn Size =" 10" >
47+ <RadzenTextBox class =" fullWidth" Value =" @GetTranslation(language, data.Key, ErrorMessageTranslations)" ValueChanged =" @((newValue) => UpdateTranslation(language, data.Key, ErrorMessageTranslations, newValue, ErrorMessageTranslationsChanged))" ></RadzenTextBox >
48+ </RadzenColumn >
49+ </RadzenRow >
50+ }
51+ </RadzenStack >
52+ </Template >
53+ </RadzenDataGridColumn >
54+ </Columns >
55+ </RadzenDataGrid >
56+ </RadzenTabsItem >
57+ </Tabs >
58+ </RadzenTabs >
59+
60+ @code {
61+ int selectedIndex { get ; set ; } = 0 ;
62+
63+ [Parameter ]
64+ public List <FormMessageTranslation > SuccessMessageTranslations
65+ {
66+ get ; set ;
67+ } = new List <FormMessageTranslation >();
68+
69+ [Parameter ]
70+ public EventCallback <List <FormMessageTranslation >> SuccessMessageTranslationsChanged { get ; set ; }
71+
72+ [Parameter ]
73+ public List <FormMessageTranslation > ErrorMessageTranslations
74+ {
75+ get ; set ;
76+ } = new List <FormMessageTranslation >();
77+
78+ [Parameter ]
79+ public EventCallback <List <FormMessageTranslation >> ErrorMessageTranslationsChanged { get ; set ; }
80+
81+ [Parameter ]
82+ public List <string > AllSupportedLanguages
83+ {
84+ get ; set ;
85+ } = new List <string >();
86+
87+ private Dictionary <string , List <FormMessageTranslation >> GetGroupedTranslations (List < FormMessageTranslation > messageTranslations )
88+ {
89+ return messageTranslations
90+ .GroupBy (mt => mt .Code )
91+ .ToDictionary (g => g .Key , g => g .ToList ());
92+ }
93+
94+ private async Task UpdateTranslation (string language , string code , List < FormMessageTranslation > translations , string newValue , EventCallback < List < FormMessageTranslation >> changed )
95+ {
96+ var selectedTranslation = translations .SingleOrDefault (t => t .Language == language && t .Code == code );
97+ if (selectedTranslation != null )
98+ {
99+ selectedTranslation .Value = newValue ;
100+ }
101+ else
102+ {
103+ translations .Add (new FormMessageTranslation
104+ {
105+ Code = code ,
106+ Language = language ,
107+ Value = newValue
108+ });
109+ }
110+
111+ await changed .InvokeAsync (translations );
112+ }
113+
114+ private string GetTranslation (string language , string code , List < FormMessageTranslation > translations )
115+ {
116+ var selectedTranslation = translations .SingleOrDefault (t => t .Language == language && t .Code == code );
117+ return selectedTranslation ? .Value ;
118+ }
119+ }
0 commit comments