@@ -36,57 +36,40 @@ const LangNode = ({
3636
3737 const permissionSet = ( perspective ) => {
3838
39- const permissions = new Set ( ) ;
4039 const perspectiveId = compositeIdToString ( perspective . id ) ;
4140 const proxy = config . buildType === "desktop" || config . buildType === "proxy" ;
4241 const proxyPermissions = proxy ? proxyData ?. permission_lists : undefined ;
4342
44- switch ( true ) {
45- // Perspective has a twin for synchronization
46- case allowedSync && perspective . single === "proxy" :
47- permissions . add ( 'proxyPers' ) ;
48-
49- case allowedSync && perspective . single !== "local" && perspective . single !== "proxy" :
50- permissions . add ( 'commonPers' ) ;
51-
52- // Perspective is locally writable
53- case localPermission && localPermission [ perspectiveId ] || user . id !== 1 :
54- permissions . add ( 'writable' ) ;
55-
56- // Perspective has no twin for synchronization or proxyPermissions is undefined
57- case perspective . single === "local" || ! proxyPermissions || user . id !== 1 :
58- permissions . add ( 'available' ) ;
59- break ;
60-
61- // Perspective has proxyPermissions for current user and can be shown locally
62- case ! ! proxyPermissions ?. view . find ( p => compositeIdToString ( p . id ) === perspectiveId ) :
63- permissions . add ( 'view' ) . add ( 'available' ) ;
64-
65- case ! ! proxyPermissions ?. edit . find ( p => compositeIdToString ( p . id ) === perspectiveId ) :
66- permissions . add ( 'edit' ) . add ( 'available' ) ;
67-
68- case ! ! proxyPermissions ?. publish . find ( p => compositeIdToString ( p . id ) === perspectiveId ) :
69- permissions . add ( 'publish' ) . add ( 'available' ) ;
70-
71- case ! ! proxyPermissions ?. limited . find ( p => compositeIdToString ( p . id ) === perspectiveId ) :
72- permissions . add ( 'limited' ) . add ( 'available' ) ;
73- }
74-
75- switch ( true ) {
76- case ! permissions . has ( 'available' ) :
77- break ;
78-
79- case permissions . has ( 'proxyPers' ) :
80- permissions . add ( 'canBeAdded' ) ;
81-
82- case permissions . has ( 'commonPers' ) && permissions . has ( 'writable' ) :
83- permissions . add ( 'canBeSynced' ) ;
84-
85- case permissions . has ( 'canBeAdded' ) || permissions . has ( 'canBeSynced' ) :
86- permissions . add ( 'syncable' ) ;
87- }
88-
89- return permissions ;
43+ /* Define various permissions */
44+
45+ const proxyPers = allowedSync && perspective . single === "proxy" ;
46+ const commonPers = allowedSync && perspective . single !== "local" && perspective . single !== "proxy" ;
47+ const localPers = perspective . single === "local" ;
48+
49+ const view = ! localPers && ! ! proxyPermissions ?. view . find ( p => compositeIdToString ( p . id ) === perspectiveId ) ;
50+ const edit = ! localPers && ! ! proxyPermissions ?. edit . find ( p => compositeIdToString ( p . id ) === perspectiveId ) ;
51+ const publish = ! localPers && ! ! proxyPermissions ?. publish . find ( p => compositeIdToString ( p . id ) === perspectiveId ) ;
52+ const limited = ! localPers && ! ! proxyPermissions ?. limited . find ( p => compositeIdToString ( p . id ) === perspectiveId ) ;
53+
54+ const available = localPers || ! proxyPermissions || view || edit || publish || limited || user . id === 1 ;
55+ const writable = localPermission && localPermission [ perspectiveId ] || user . id === 1 ;
56+
57+ const canBeAdded = available && proxyPers ;
58+ const canBeSynced = available && writable && commonPers ;
59+ const syncable = canBeAdded || canBeSynced ;
60+
61+ return {
62+ proxyPers,
63+ commonPers,
64+ available,
65+ view,
66+ edit,
67+ publish,
68+ limited,
69+ canBeAdded,
70+ canBeSynced,
71+ syncable
72+ } ;
9073 }
9174
9275 const { getTranslation, chooseTranslation } = useTranslations ( ) ;
@@ -111,13 +94,15 @@ const LangNode = ({
11194 : language . dictionaries ;
11295
11396 const onSynchronize = ( { perspective, silentMode } ) => {
114- const action = ( perspective . single === 'proxy' ) ? 'create' : 'edit' ;
115- const refetching = ( action === 'create' ) ;
11697 const permissions = permissionSet ( perspective ) ;
117-
118- if ( action === 'create' && ! permissions . has ( 'canBeAdded' ) ||
119- action === 'edit' && ! permissions . has ( 'canBeSynced' ) ) {
120- console . log ( "Недостаточно прав на загрузку или обновление перспективы!" ) ;
98+ const action = permissions . proxyPers ? 'create' : 'edit' ;
99+ const refetching = permissions . proxyPers ;
100+
101+ if ( action === 'create' && ! permissions . canBeAdded ||
102+ action === 'edit' && ! permissions . canBeSynced
103+ ) {
104+ console . log (
105+ `Недостаточно прав на загрузку или обновление перспективы "${ chooseTranslation ( perspective . translations ) } "!` ) ;
121106 return ;
122107 }
123108
@@ -273,26 +258,23 @@ const LangNode = ({
273258 }
274259
275260 const permissions = permissionSet ( perspective ) ;
276- const proxyPers = permissions . has ( 'proxyPers' ) ;
277- const commonPers = permissions . has ( 'commonPers' ) ;
278- const canBeSynced = permissions . has ( 'canBeSynced' ) ;
279261
280- if ( ! permissions . has ( ' available' ) ) {
262+ if ( ! permissions . available ) {
281263 return ;
282264 }
283265
284266 return (
285267 < Dropdown . Item
286268 key = { compositeIdToString ( perspective . id ) }
287- as = { proxyPers ? "span" : Link }
269+ as = { permissions . proxyPers ? "span" : Link }
288270 to = {
289- ! proxyPers
271+ ! permissions . proxyPers
290272 ? `/dictionary/${ dictionary . id . join ( "/" ) } /perspective/${ perspective . id . join ( "/" ) } `
291273 : null
292274 }
293- className = { proxyPers ? "item_remote" : "" }
275+ className = { permissions . proxyPers ? "item_remote" : "" }
294276 onClick = {
295- ( proxyPers && perspective . translations &&
277+ ( permissions . proxyPers && perspective . translations &&
296278 ( ( ) =>
297279 openConfirmModal (
298280 `${ getTranslation (
@@ -312,10 +294,10 @@ const LangNode = ({
312294 }
313295 >
314296 < span >
315- { permissions . has ( ' view' ) && < Icon name = "book" /> }
316- { permissions . has ( ' edit' ) && < Icon name = "edit" /> }
317- { permissions . has ( ' publish' ) && < Icon name = "external share" /> }
318- { permissions . has ( ' limited' ) && < Icon name = "privacy" /> }
297+ { permissions . view && < Icon name = "book" /> }
298+ { permissions . edit && < Icon name = "edit" /> }
299+ { permissions . publish && < Icon name = "external share" /> }
300+ { permissions . limited && < Icon name = "privacy" /> }
319301 </ span >
320302
321303 { perspective . translations && (
@@ -325,7 +307,7 @@ const LangNode = ({
325307 </ >
326308 ) }
327309
328- { commonPers && (
310+ { permissions . commonPers && (
329311 < Button
330312 icon = { < i className = "lingvo-icon lingvo-icon_refresh" /> }
331313 onClick = { event => {
@@ -335,7 +317,7 @@ const LangNode = ({
335317 } ) ;
336318 event . preventDefault ( ) ;
337319 } }
338- disabled = { ! canBeSynced }
320+ disabled = { ! permissions . canBeSynced }
339321 className = "lingvo-button-green lingvo-lang-tree-button"
340322 />
341323 ) }
@@ -359,16 +341,25 @@ const LangNode = ({
359341 { commonDict && (
360342 < Button
361343 icon = { < i className = "lingvo-icon lingvo-icon_refresh" /> }
362- onClick = { ( ) => {
363- console . log ( "Обновляем словарь" ) ;
364- perspectives . forEach ( perspective => {
365- onSynchronize ( {
366- perspective,
367- silentMode : true
368- } ) ;
369- } ) ;
370- } }
371- disabled = { ! perspectives . some ( p => permissionSet ( p ) . has ( 'syncable' ) ) }
344+ onClick = { ( ) =>
345+ openConfirmModal (
346+ `${ getTranslation (
347+ "Dictionary" ) } "${ chooseTranslation ( dictionary . translations ) } " ${ getTranslation (
348+ "with own perspectives" ) } ${ getTranslation ( "will be renewed" ) } ?`,
349+ ( ) => {
350+ console . log ( "Обновляем словарь" ) ;
351+ perspectives . forEach ( perspective => {
352+ onSynchronize ( {
353+ perspective,
354+ silentMode : true
355+ } ) ;
356+ } ) ;
357+ } ,
358+ getTranslation ( "Yes" ) ,
359+ getTranslation ( "No" )
360+ )
361+ }
362+ disabled = { ! perspectives . some ( p => permissionSet ( p ) . syncable ) }
372363 className = "lingvo-button-green lingvo-lang-tree-button"
373364 />
374365 ) }
0 commit comments