Skip to content

Commit 390d984

Browse files
committed
Fixing
1 parent d2e173b commit 390d984

1 file changed

Lines changed: 68 additions & 77 deletions

File tree

src/components/LanguageTree/node.js

Lines changed: 68 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)