Merge branch 'develop' into feature/js-sdk-presets

Conflicts:
	packages/client/src/pages/PortalSettings/categories/developer-tools/JavascriptSDK/index.js
	packages/common/components/Navigation/sub-components/control-btn.js
	packages/shared/components/navigation/Navigation.tsx
	packages/shared/selectors/Room/index.tsx
This commit is contained in:
Vladimir Khvan 2024-01-23 16:38:55 +05:00
parent a8f8c4c1ce
commit 56e669555d
673 changed files with 24831 additions and 23072 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

893
.yarn/releases/yarn-4.0.2.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,11 @@
compressionLevel: mixed
enableGlobalCache: false
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
spec: "@yarnpkg/plugin-workspace-tools"
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
- path: .yarn/plugins/@yarnpkg/plugin-licenses-audit.cjs
spec: "https://raw.githubusercontent.com/tophat/yarn-plugin-licenses/master/bundles/@yarnpkg/plugin-licenses-audit.js"
yarnPath: .yarn/releases/yarn-3.2.4.cjs
yarnPath: .yarn/releases/yarn-4.0.2.cjs

View File

@ -1,6 +1,6 @@
const { join } = require("path");
const { readdirSync, readFileSync, writeFileSync } = require("fs");
const minifyJson = require("../../packages/common/utils/minifyJson.js");
const minifyJson = require("../../packages/shared/utils/minifyJson.js");
const localesDir = join(
__dirname,

355
graph.svg
View File

@ -1,355 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 9.0.0 (20230911.1827)
-->
<!-- Title: G Pages: 1 -->
<svg width="2744pt" height="500pt"
viewBox="0.00 0.00 2743.70 500.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(21.6 478.4)">
<title>G</title>
<polygon fill="#111111" stroke="none" points="-21.6,21.6 -21.6,-478.4 2722.1,-478.4 2722.1,21.6 -21.6,21.6"/>
<!-- client/src/components/panels/InvitePanel/index.js -->
<g id="node1" class="node">
<title>client/src/components/panels/InvitePanel/index.js</title>
<path fill="none" stroke="#ff6c60" d="M325.33,-26.8C325.33,-26.8 30.42,-26.8 30.42,-26.8 26.46,-26.8 22.5,-22.84 22.5,-18.88 22.5,-18.88 22.5,-10.97 22.5,-10.97 22.5,-7.01 26.46,-3.05 30.42,-3.05 30.42,-3.05 325.33,-3.05 325.33,-3.05 329.29,-3.05 333.25,-7.01 333.25,-10.97 333.25,-10.97 333.25,-18.88 333.25,-18.88 333.25,-22.84 329.29,-26.8 325.33,-26.8"/>
<text text-anchor="middle" x="177.88" y="-9.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/components/panels/InvitePanel/index.js</text>
</g>
<!-- client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js -->
<g id="node2" class="node">
<title>client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js</title>
<path fill="none" stroke="#ff6c60" d="M828.83,-36.8C828.83,-36.8 399.67,-36.8 399.67,-36.8 395.71,-36.8 391.75,-32.84 391.75,-28.88 391.75,-28.88 391.75,-20.97 391.75,-20.97 391.75,-17.01 395.71,-13.05 399.67,-13.05 399.67,-13.05 828.83,-13.05 828.83,-13.05 832.79,-13.05 836.75,-17.01 836.75,-20.97 836.75,-20.97 836.75,-28.88 836.75,-28.88 836.75,-32.84 832.79,-36.8 828.83,-36.8"/>
<text text-anchor="middle" x="614.25" y="-19.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js</text>
</g>
<!-- client/src/components/panels/InvitePanel/index.js&#45;&gt;client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js -->
<g id="edge1" class="edge">
<title>client/src/components/panels/InvitePanel/index.js&#45;&gt;client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js</title>
<path fill="none" stroke="#757575" d="M333.55,-18.49C348.65,-18.83 364.2,-19.19 379.85,-19.55"/>
<polygon fill="#757575" stroke="#757575" points="379.68,-23.05 389.75,-19.78 379.84,-16.05 379.68,-23.05"/>
</g>
<!-- client/src/components/panels/index.js -->
<g id="node3" class="node">
<title>client/src/components/panels/index.js</title>
<path fill="none" stroke="#ff6c60" d="M1154.96,-26.8C1154.96,-26.8 930.54,-26.8 930.54,-26.8 926.58,-26.8 922.62,-22.84 922.62,-18.88 922.62,-18.88 922.62,-10.97 922.62,-10.97 922.62,-7.01 926.58,-3.05 930.54,-3.05 930.54,-3.05 1154.96,-3.05 1154.96,-3.05 1158.92,-3.05 1162.88,-7.01 1162.88,-10.97 1162.88,-10.97 1162.88,-18.88 1162.88,-18.88 1162.88,-22.84 1158.92,-26.8 1154.96,-26.8"/>
<text text-anchor="middle" x="1042.75" y="-9.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/components/panels/index.js</text>
</g>
<!-- client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js&#45;&gt;client/src/components/panels/index.js -->
<g id="edge2" class="edge">
<title>client/src/components/panels/InvitePanel/sub&#45;components/InviteInput.js&#45;&gt;client/src/components/panels/index.js</title>
<path fill="none" stroke="#757575" d="M837.24,-19.72C862.47,-19.13 887.52,-18.54 911,-17.99"/>
<polygon fill="#757575" stroke="#757575" points="910.97,-21.49 920.89,-17.76 910.81,-14.5 910.97,-21.49"/>
</g>
<!-- client/src/components/panels/index.js&#45;&gt;client/src/components/panels/InvitePanel/index.js -->
<g id="edge4" class="edge">
<title>client/src/components/panels/index.js&#45;&gt;client/src/components/panels/InvitePanel/index.js</title>
<path fill="none" stroke="#757575" d="M922.28,-7.43C894.24,-5.98 864.45,-4.67 836.75,-3.93 639.04,1.37 589.46,1.18 391.75,-3.93 376.42,-4.32 360.48,-4.88 344.52,-5.53"/>
<polygon fill="#757575" stroke="#757575" points="344.83,-2.02 334.99,-5.94 345.13,-9.01 344.83,-2.02"/>
</g>
<!-- client/src/components/panels/SharingPanel/index.js -->
<g id="node4" class="node">
<title>client/src/components/panels/SharingPanel/index.js</title>
<path fill="none" stroke="#ff6c60" d="M1573.33,-26.8C1573.33,-26.8 1264.17,-26.8 1264.17,-26.8 1260.21,-26.8 1256.25,-22.84 1256.25,-18.88 1256.25,-18.88 1256.25,-10.97 1256.25,-10.97 1256.25,-7.01 1260.21,-3.05 1264.17,-3.05 1264.17,-3.05 1573.33,-3.05 1573.33,-3.05 1577.29,-3.05 1581.25,-7.01 1581.25,-10.97 1581.25,-10.97 1581.25,-18.88 1581.25,-18.88 1581.25,-22.84 1577.29,-26.8 1573.33,-26.8"/>
<text text-anchor="middle" x="1418.75" y="-9.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/components/panels/SharingPanel/index.js</text>
</g>
<!-- client/src/components/panels/index.js&#45;&gt;client/src/components/panels/SharingPanel/index.js -->
<g id="edge5" class="edge">
<title>client/src/components/panels/index.js&#45;&gt;client/src/components/panels/SharingPanel/index.js</title>
<path fill="none" stroke="#757575" d="M1163.37,-8.58C1189.29,-8.26 1217.21,-8.13 1244.72,-8.19"/>
<polygon fill="#757575" stroke="#757575" points="1244.54,-11.69 1254.55,-8.23 1244.56,-4.69 1244.54,-11.69"/>
</g>
<!-- client/src/components/panels/SharingPanel/index.js&#45;&gt;client/src/components/panels/index.js -->
<g id="edge3" class="edge">
<title>client/src/components/panels/SharingPanel/index.js&#45;&gt;client/src/components/panels/index.js</title>
<path fill="none" stroke="#757575" d="M1256.06,-21.62C1228.83,-21.74 1200.87,-21.67 1174.55,-21.4"/>
<polygon fill="#757575" stroke="#757575" points="1174.92,-17.9 1164.89,-21.29 1174.84,-24.9 1174.92,-17.9"/>
</g>
<!-- client/src/helpers/desktop.js -->
<g id="node5" class="node">
<title>client/src/helpers/desktop.js</title>
<path fill="none" stroke="#ff6c60" d="M260.83,-87.8C260.83,-87.8 94.92,-87.8 94.92,-87.8 90.96,-87.8 87,-83.84 87,-79.88 87,-79.88 87,-71.97 87,-71.97 87,-68.01 90.96,-64.05 94.92,-64.05 94.92,-64.05 260.83,-64.05 260.83,-64.05 264.79,-64.05 268.75,-68.01 268.75,-71.97 268.75,-71.97 268.75,-79.88 268.75,-79.88 268.75,-83.84 264.79,-87.8 260.83,-87.8"/>
<text text-anchor="middle" x="177.88" y="-70.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/helpers/desktop.js</text>
</g>
<!-- client/src/store/index.js -->
<g id="node6" class="node">
<title>client/src/store/index.js</title>
<path fill="none" stroke="#ff6c60" d="M682.58,-117.8C682.58,-117.8 545.92,-117.8 545.92,-117.8 541.96,-117.8 538,-113.84 538,-109.88 538,-109.88 538,-101.97 538,-101.97 538,-98.01 541.96,-94.05 545.92,-94.05 545.92,-94.05 682.58,-94.05 682.58,-94.05 686.54,-94.05 690.5,-98.01 690.5,-101.97 690.5,-101.97 690.5,-109.88 690.5,-109.88 690.5,-113.84 686.54,-117.8 682.58,-117.8"/>
<text text-anchor="middle" x="614.25" y="-100.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/store/index.js</text>
</g>
<!-- client/src/helpers/desktop.js&#45;&gt;client/src/store/index.js -->
<g id="edge6" class="edge">
<title>client/src/helpers/desktop.js&#45;&gt;client/src/store/index.js</title>
<path fill="none" stroke="#757575" d="M269.14,-82.16C344.68,-87.38 451.78,-94.77 526.36,-99.93"/>
<polygon fill="#757575" stroke="#757575" points="525.85,-103.4 536.07,-100.6 526.33,-96.42 525.85,-103.4"/>
</g>
<!-- client/src/store/HotkeyStore.js -->
<g id="node11" class="node">
<title>client/src/store/HotkeyStore.js</title>
<path fill="none" stroke="#ff6c60" d="M1132.08,-87.8C1132.08,-87.8 953.42,-87.8 953.42,-87.8 949.46,-87.8 945.5,-83.84 945.5,-79.88 945.5,-79.88 945.5,-71.97 945.5,-71.97 945.5,-68.01 949.46,-64.05 953.42,-64.05 953.42,-64.05 1132.08,-64.05 1132.08,-64.05 1136.04,-64.05 1140,-68.01 1140,-71.97 1140,-71.97 1140,-79.88 1140,-79.88 1140,-83.84 1136.04,-87.8 1132.08,-87.8"/>
<text text-anchor="middle" x="1042.75" y="-70.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/store/HotkeyStore.js</text>
</g>
<!-- client/src/store/index.js&#45;&gt;client/src/store/HotkeyStore.js -->
<g id="edge12" class="edge">
<title>client/src/store/index.js&#45;&gt;client/src/store/HotkeyStore.js</title>
<path fill="none" stroke="#757575" d="M690.52,-100.63C758.1,-95.88 858.08,-88.85 934.11,-83.5"/>
<polygon fill="#757575" stroke="#757575" points="933.9,-87.02 943.63,-82.83 933.41,-80.04 933.9,-87.02"/>
</g>
<!-- client/src/pages/FormGallery/TilesView/StyledTileView.js -->
<g id="node7" class="node">
<title>client/src/pages/FormGallery/TilesView/StyledTileView.js</title>
<path fill="none" stroke="#ff6c60" d="M347.83,-159.8C347.83,-159.8 7.92,-159.8 7.92,-159.8 3.96,-159.8 0,-155.84 0,-151.88 0,-151.88 0,-143.97 0,-143.97 0,-140.01 3.96,-136.05 7.92,-136.05 7.92,-136.05 347.83,-136.05 347.83,-136.05 351.79,-136.05 355.75,-140.01 355.75,-143.97 355.75,-143.97 355.75,-151.88 355.75,-151.88 355.75,-155.84 351.79,-159.8 347.83,-159.8"/>
<text text-anchor="middle" x="177.88" y="-142.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/pages/FormGallery/TilesView/StyledTileView.js</text>
</g>
<!-- client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js -->
<g id="node8" class="node">
<title>client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js</title>
<path fill="none" stroke="#ff6c60" d="M826.96,-159.8C826.96,-159.8 401.54,-159.8 401.54,-159.8 397.58,-159.8 393.62,-155.84 393.62,-151.88 393.62,-151.88 393.62,-143.97 393.62,-143.97 393.62,-140.01 397.58,-136.05 401.54,-136.05 401.54,-136.05 826.96,-136.05 826.96,-136.05 830.92,-136.05 834.88,-140.01 834.88,-143.97 834.88,-143.97 834.88,-151.88 834.88,-151.88 834.88,-155.84 830.92,-159.8 826.96,-159.8"/>
<text text-anchor="middle" x="614.25" y="-142.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js</text>
</g>
<!-- client/src/pages/FormGallery/TilesView/StyledTileView.js&#45;&gt;client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js -->
<g id="edge7" class="edge">
<title>client/src/pages/FormGallery/TilesView/StyledTileView.js&#45;&gt;client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js</title>
<path fill="none" stroke="#757575" d="M356.18,-141.28C364.66,-141.23 373.23,-141.2 381.82,-141.19"/>
<polygon fill="#757575" stroke="#757575" points="381.62,-144.69 391.62,-141.18 381.62,-137.69 381.62,-144.69"/>
</g>
<!-- client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js&#45;&gt;client/src/pages/FormGallery/TilesView/StyledTileView.js -->
<g id="edge8" class="edge">
<title>client/src/pages/FormGallery/TilesView/sub&#45;components/TileContent.js&#45;&gt;client/src/pages/FormGallery/TilesView/StyledTileView.js</title>
<path fill="none" stroke="#757575" d="M393.13,-154.68C384.62,-154.67 376.11,-154.66 367.66,-154.62"/>
<polygon fill="#757575" stroke="#757575" points="367.71,-151.13 357.69,-154.58 367.68,-158.13 367.71,-151.13"/>
</g>
<!-- client/src/pages/PortalSettings/utils/index.js -->
<g id="node9" class="node">
<title>client/src/pages/PortalSettings/utils/index.js</title>
<path fill="none" stroke="#ff6c60" d="M307.33,-201.8C307.33,-201.8 48.42,-201.8 48.42,-201.8 44.46,-201.8 40.5,-197.84 40.5,-193.88 40.5,-193.88 40.5,-185.97 40.5,-185.97 40.5,-182.01 44.46,-178.05 48.42,-178.05 48.42,-178.05 307.33,-178.05 307.33,-178.05 311.29,-178.05 315.25,-182.01 315.25,-185.97 315.25,-185.97 315.25,-193.88 315.25,-193.88 315.25,-197.84 311.29,-201.8 307.33,-201.8"/>
<text text-anchor="middle" x="177.88" y="-184.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/pages/PortalSettings/utils/index.js</text>
</g>
<!-- client/src/pages/PortalSettings/utils/resetSessionStorage.js -->
<g id="node10" class="node">
<title>client/src/pages/PortalSettings/utils/resetSessionStorage.js</title>
<path fill="none" stroke="#ff6c60" d="M790.21,-201.8C790.21,-201.8 438.29,-201.8 438.29,-201.8 434.33,-201.8 430.38,-197.84 430.38,-193.88 430.38,-193.88 430.38,-185.97 430.38,-185.97 430.38,-182.01 434.33,-178.05 438.29,-178.05 438.29,-178.05 790.21,-178.05 790.21,-178.05 794.17,-178.05 798.12,-182.01 798.12,-185.97 798.12,-185.97 798.12,-193.88 798.12,-193.88 798.12,-197.84 794.17,-201.8 790.21,-201.8"/>
<text text-anchor="middle" x="614.25" y="-184.5" font-family="Arial" font-size="14.00" fill="#ff6c60">client/src/pages/PortalSettings/utils/resetSessionStorage.js</text>
</g>
<!-- client/src/pages/PortalSettings/utils/index.js&#45;&gt;client/src/pages/PortalSettings/utils/resetSessionStorage.js -->
<g id="edge9" class="edge">
<title>client/src/pages/PortalSettings/utils/index.js&#45;&gt;client/src/pages/PortalSettings/utils/resetSessionStorage.js</title>
<path fill="none" stroke="#757575" d="M315.72,-183.6C348.48,-183.24 384.08,-183.11 418.89,-183.21"/>
<polygon fill="#757575" stroke="#757575" points="418.63,-186.71 428.65,-183.25 418.66,-179.71 418.63,-186.71"/>
</g>
<!-- client/src/pages/PortalSettings/utils/resetSessionStorage.js&#45;&gt;client/src/pages/PortalSettings/utils/index.js -->
<g id="edge10" class="edge">
<title>client/src/pages/PortalSettings/utils/resetSessionStorage.js&#45;&gt;client/src/pages/PortalSettings/utils/index.js</title>
<path fill="none" stroke="#757575" d="M430.16,-196.6C395.71,-196.75 360.09,-196.67 326.88,-196.36"/>
<polygon fill="#757575" stroke="#757575" points="327.27,-192.87 317.23,-196.26 327.19,-199.87 327.27,-192.87"/>
</g>
<!-- client/src/store/HotkeyStore.js&#45;&gt;client/src/helpers/desktop.js -->
<g id="edge11" class="edge">
<title>client/src/store/HotkeyStore.js&#45;&gt;client/src/helpers/desktop.js</title>
<path fill="none" stroke="#757575" d="M945.26,-75.93C780.93,-75.93 448.24,-75.93 280.48,-75.93"/>
<polygon fill="#757575" stroke="#757575" points="280.69,-72.43 270.69,-75.93 280.69,-79.43 280.69,-72.43"/>
</g>
<!-- common/store/AuthStore.js -->
<g id="node12" class="node">
<title>common/store/AuthStore.js</title>
<path fill="none" stroke="#ff6c60" d="M260.08,-279.8C260.08,-279.8 95.67,-279.8 95.67,-279.8 91.71,-279.8 87.75,-275.84 87.75,-271.88 87.75,-271.88 87.75,-263.97 87.75,-263.97 87.75,-260.01 91.71,-256.05 95.67,-256.05 95.67,-256.05 260.08,-256.05 260.08,-256.05 264.04,-256.05 268,-260.01 268,-263.97 268,-263.97 268,-271.88 268,-271.88 268,-275.84 264.04,-279.8 260.08,-279.8"/>
<text text-anchor="middle" x="177.88" y="-262.5" font-family="Arial" font-size="14.00" fill="#ff6c60">common/store/AuthStore.js</text>
</g>
<!-- common/store/CurrentQuotaStore.js -->
<g id="node13" class="node">
<title>common/store/CurrentQuotaStore.js</title>
<path fill="none" stroke="#ff6c60" d="M723.83,-285.8C723.83,-285.8 504.67,-285.8 504.67,-285.8 500.71,-285.8 496.75,-281.84 496.75,-277.88 496.75,-277.88 496.75,-269.97 496.75,-269.97 496.75,-266.01 500.71,-262.05 504.67,-262.05 504.67,-262.05 723.83,-262.05 723.83,-262.05 727.79,-262.05 731.75,-266.01 731.75,-269.97 731.75,-269.97 731.75,-277.88 731.75,-277.88 731.75,-281.84 727.79,-285.8 723.83,-285.8"/>
<text text-anchor="middle" x="614.25" y="-268.5" font-family="Arial" font-size="14.00" fill="#ff6c60">common/store/CurrentQuotaStore.js</text>
</g>
<!-- common/store/AuthStore.js&#45;&gt;common/store/CurrentQuotaStore.js -->
<g id="edge13" class="edge">
<title>common/store/AuthStore.js&#45;&gt;common/store/CurrentQuotaStore.js</title>
<path fill="none" stroke="#757575" d="M268.35,-263.58C330.93,-263.14 415.45,-264.1 485.15,-265.94"/>
<polygon fill="#757575" stroke="#757575" points="485.05,-269.44 495.14,-266.21 485.24,-262.44 485.05,-269.44"/>
</g>
<!-- common/store/CurrentTariffStatusStore.js -->
<g id="node14" class="node">
<title>common/store/CurrentTariffStatusStore.js</title>
<path fill="none" stroke="#ff6c60" d="M738.83,-243.8C738.83,-243.8 489.67,-243.8 489.67,-243.8 485.71,-243.8 481.75,-239.84 481.75,-235.88 481.75,-235.88 481.75,-227.97 481.75,-227.97 481.75,-224.01 485.71,-220.05 489.67,-220.05 489.67,-220.05 738.83,-220.05 738.83,-220.05 742.79,-220.05 746.75,-224.01 746.75,-227.97 746.75,-227.97 746.75,-235.88 746.75,-235.88 746.75,-239.84 742.79,-243.8 738.83,-243.8"/>
<text text-anchor="middle" x="614.25" y="-226.5" font-family="Arial" font-size="14.00" fill="#ff6c60">common/store/CurrentTariffStatusStore.js</text>
</g>
<!-- common/store/AuthStore.js&#45;&gt;common/store/CurrentTariffStatusStore.js -->
<g id="edge14" class="edge">
<title>common/store/AuthStore.js&#45;&gt;common/store/CurrentTariffStatusStore.js</title>
<path fill="none" stroke="#757575" d="M262.37,-255.55C321.08,-249.37 401.12,-242.42 469.94,-237.41"/>
<polygon fill="#757575" stroke="#757575" points="470.08,-240.91 479.81,-236.7 469.58,-233.93 470.08,-240.91"/>
</g>
<!-- common/store/CurrentQuotaStore.js&#45;&gt;common/store/AuthStore.js -->
<g id="edge15" class="edge">
<title>common/store/CurrentQuotaStore.js&#45;&gt;common/store/AuthStore.js</title>
<path fill="none" stroke="#757575" d="M496.65,-278.38C428.99,-278.44 344.61,-277.19 279.8,-275.12"/>
<polygon fill="#757575" stroke="#757575" points="279.97,-271.63 269.86,-274.79 279.74,-278.62 279.97,-271.63"/>
</g>
<!-- common/store/CurrentTariffStatusStore.js&#45;&gt;common/store/AuthStore.js -->
<g id="edge16" class="edge">
<title>common/store/CurrentTariffStatusStore.js&#45;&gt;common/store/AuthStore.js</title>
<path fill="none" stroke="#757575" d="M529.78,-244.3C458.49,-251.81 355.73,-260.44 279.82,-265.36"/>
<polygon fill="#757575" stroke="#757575" points="279.62,-261.87 269.86,-266 280.06,-268.86 279.62,-261.87"/>
</g>
<!-- components/ColorTheme/ColorTheme.js -->
<g id="node15" class="node">
<title>components/ColorTheme/ColorTheme.js</title>
<path fill="none" stroke="#ff6c60" d="M300.58,-341.8C300.58,-341.8 55.17,-341.8 55.17,-341.8 51.21,-341.8 47.25,-337.84 47.25,-333.88 47.25,-333.88 47.25,-325.97 47.25,-325.97 47.25,-322.01 51.21,-318.05 55.17,-318.05 55.17,-318.05 300.58,-318.05 300.58,-318.05 304.54,-318.05 308.5,-322.01 308.5,-325.97 308.5,-325.97 308.5,-333.88 308.5,-333.88 308.5,-337.84 304.54,-341.8 300.58,-341.8"/>
<text text-anchor="middle" x="177.88" y="-324.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/ColorTheme/ColorTheme.js</text>
</g>
<!-- components/ColorTheme/styled/index.js -->
<g id="node16" class="node">
<title>components/ColorTheme/styled/index.js</title>
<path fill="none" stroke="#ff6c60" d="M735.08,-414.8C735.08,-414.8 493.42,-414.8 493.42,-414.8 489.46,-414.8 485.5,-410.84 485.5,-406.88 485.5,-406.88 485.5,-398.97 485.5,-398.97 485.5,-395.01 489.46,-391.05 493.42,-391.05 493.42,-391.05 735.08,-391.05 735.08,-391.05 739.04,-391.05 743,-395.01 743,-398.97 743,-398.97 743,-406.88 743,-406.88 743,-410.84 739.04,-414.8 735.08,-414.8"/>
<text text-anchor="middle" x="614.25" y="-397.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/ColorTheme/styled/index.js</text>
</g>
<!-- components/ColorTheme/ColorTheme.js&#45;&gt;components/ColorTheme/styled/index.js -->
<g id="edge17" class="edge">
<title>components/ColorTheme/ColorTheme.js&#45;&gt;components/ColorTheme/styled/index.js</title>
<path fill="none" stroke="#757575" d="M252.07,-342.23C328.51,-355.07 448.25,-375.2 528.68,-388.71"/>
<polygon fill="#757575" stroke="#757575" points="527.82,-392.12 538.26,-390.32 528.98,-385.22 527.82,-392.12"/>
</g>
<!-- components/ColorTheme/styled/mainButton.js -->
<g id="node18" class="node">
<title>components/ColorTheme/styled/mainButton.js</title>
<path fill="none" stroke="#ff6c60" d="M1181.96,-456.8C1181.96,-456.8 903.54,-456.8 903.54,-456.8 899.58,-456.8 895.62,-452.84 895.62,-448.88 895.62,-448.88 895.62,-440.97 895.62,-440.97 895.62,-437.01 899.58,-433.05 903.54,-433.05 903.54,-433.05 1181.96,-433.05 1181.96,-433.05 1185.92,-433.05 1189.88,-437.01 1189.88,-440.97 1189.88,-440.97 1189.88,-448.88 1189.88,-448.88 1189.88,-452.84 1185.92,-456.8 1181.96,-456.8"/>
<text text-anchor="middle" x="1042.75" y="-439.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/ColorTheme/styled/mainButton.js</text>
</g>
<!-- components/ColorTheme/styled/index.js&#45;&gt;components/ColorTheme/styled/mainButton.js -->
<g id="edge19" class="edge">
<title>components/ColorTheme/styled/index.js&#45;&gt;components/ColorTheme/styled/mainButton.js</title>
<path fill="none" stroke="#757575" d="M740.91,-415.3C792.52,-420.38 852.42,-426.28 905.12,-431.47"/>
<polygon fill="#757575" stroke="#757575" points="904.45,-434.92 914.75,-432.42 905.14,-427.96 904.45,-434.92"/>
</g>
<!-- components/ColorTheme/styled/mobileProgressBar.js -->
<g id="node19" class="node">
<title>components/ColorTheme/styled/mobileProgressBar.js</title>
<path fill="none" stroke="#ff6c60" d="M1204.83,-414.8C1204.83,-414.8 880.67,-414.8 880.67,-414.8 876.71,-414.8 872.75,-410.84 872.75,-406.88 872.75,-406.88 872.75,-398.97 872.75,-398.97 872.75,-395.01 876.71,-391.05 880.67,-391.05 880.67,-391.05 1204.83,-391.05 1204.83,-391.05 1208.79,-391.05 1212.75,-395.01 1212.75,-398.97 1212.75,-398.97 1212.75,-406.88 1212.75,-406.88 1212.75,-410.84 1208.79,-414.8 1204.83,-414.8"/>
<text text-anchor="middle" x="1042.75" y="-397.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/ColorTheme/styled/mobileProgressBar.js</text>
</g>
<!-- components/ColorTheme/styled/index.js&#45;&gt;components/ColorTheme/styled/mobileProgressBar.js -->
<g id="edge20" class="edge">
<title>components/ColorTheme/styled/index.js&#45;&gt;components/ColorTheme/styled/mobileProgressBar.js</title>
<path fill="none" stroke="#757575" d="M743.21,-402.93C780.25,-402.93 821.4,-402.93 861.02,-402.93"/>
<polygon fill="#757575" stroke="#757575" points="860.91,-406.43 870.91,-402.93 860.91,-399.43 860.91,-406.43"/>
</g>
<!-- components/ColorTheme/index.js -->
<g id="node17" class="node">
<title>components/ColorTheme/index.js</title>
<path fill="none" stroke="#ff6c60" d="M2692.58,-376.8C2692.58,-376.8 2489.92,-376.8 2489.92,-376.8 2485.96,-376.8 2482,-372.84 2482,-368.88 2482,-368.88 2482,-360.97 2482,-360.97 2482,-357.01 2485.96,-353.05 2489.92,-353.05 2489.92,-353.05 2692.58,-353.05 2692.58,-353.05 2696.54,-353.05 2700.5,-357.01 2700.5,-360.97 2700.5,-360.97 2700.5,-368.88 2700.5,-368.88 2700.5,-372.84 2696.54,-376.8 2692.58,-376.8"/>
<text text-anchor="middle" x="2591.25" y="-359.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/ColorTheme/index.js</text>
</g>
<!-- components/ColorTheme/index.js&#45;&gt;components/ColorTheme/ColorTheme.js -->
<g id="edge18" class="edge">
<title>components/ColorTheme/index.js&#45;&gt;components/ColorTheme/ColorTheme.js</title>
<path fill="none" stroke="#757575" d="M2515.55,-352.59C2493.24,-349.3 2468.68,-346.07 2446,-343.93 2252.78,-325.7 2203.82,-324.93 2009.75,-324.93 1041.75,-324.93 1041.75,-324.93 1041.75,-324.93 787.55,-324.93 491.22,-327.12 320.31,-328.6"/>
<polygon fill="#757575" stroke="#757575" points="320.46,-325.1 310.49,-328.69 320.52,-332.1 320.46,-325.1"/>
</g>
<!-- components/main&#45;button/styled&#45;main&#45;button.js -->
<g id="node20" class="node">
<title>components/main&#45;button/styled&#45;main&#45;button.js</title>
<path fill="none" stroke="#ff6c60" d="M1558.33,-456.8C1558.33,-456.8 1279.17,-456.8 1279.17,-456.8 1275.21,-456.8 1271.25,-452.84 1271.25,-448.88 1271.25,-448.88 1271.25,-440.97 1271.25,-440.97 1271.25,-437.01 1275.21,-433.05 1279.17,-433.05 1279.17,-433.05 1558.33,-433.05 1558.33,-433.05 1562.29,-433.05 1566.25,-437.01 1566.25,-440.97 1566.25,-440.97 1566.25,-448.88 1566.25,-448.88 1566.25,-452.84 1562.29,-456.8 1558.33,-456.8"/>
<text text-anchor="middle" x="1418.75" y="-439.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/main&#45;button/styled&#45;main&#45;button.js</text>
</g>
<!-- components/ColorTheme/styled/mainButton.js&#45;&gt;components/main&#45;button/styled&#45;main&#45;button.js -->
<g id="edge21" class="edge">
<title>components/ColorTheme/styled/mainButton.js&#45;&gt;components/main&#45;button/styled&#45;main&#45;button.js</title>
<path fill="none" stroke="#757575" d="M1190.22,-444.93C1213.01,-444.93 1236.64,-444.93 1259.67,-444.93"/>
<polygon fill="#757575" stroke="#757575" points="1259.41,-448.43 1269.41,-444.93 1259.41,-441.43 1259.41,-448.43"/>
</g>
<!-- components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js -->
<g id="node21" class="node">
<title>components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js</title>
<path fill="none" stroke="#ff6c60" d="M1580.83,-414.8C1580.83,-414.8 1256.67,-414.8 1256.67,-414.8 1252.71,-414.8 1248.75,-410.84 1248.75,-406.88 1248.75,-406.88 1248.75,-398.97 1248.75,-398.97 1248.75,-395.01 1252.71,-391.05 1256.67,-391.05 1256.67,-391.05 1580.83,-391.05 1580.83,-391.05 1584.79,-391.05 1588.75,-395.01 1588.75,-398.97 1588.75,-398.97 1588.75,-406.88 1588.75,-406.88 1588.75,-410.84 1584.79,-414.8 1580.83,-414.8"/>
<text text-anchor="middle" x="1418.75" y="-397.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js</text>
</g>
<!-- components/ColorTheme/styled/mobileProgressBar.js&#45;&gt;components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js -->
<g id="edge22" class="edge">
<title>components/ColorTheme/styled/mobileProgressBar.js&#45;&gt;components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js</title>
<path fill="none" stroke="#757575" d="M1213.24,-402.93C1221.19,-402.93 1229.18,-402.93 1237.15,-402.93"/>
<polygon fill="#757575" stroke="#757575" points="1236.9,-406.43 1246.9,-402.93 1236.9,-399.43 1236.9,-406.43"/>
</g>
<!-- components/drop&#45;down/index.js -->
<g id="node24" class="node">
<title>components/drop&#45;down/index.js</title>
<path fill="none" stroke="#ff6c60" d="M1834.96,-456.8C1834.96,-456.8 1643.54,-456.8 1643.54,-456.8 1639.58,-456.8 1635.62,-452.84 1635.62,-448.88 1635.62,-448.88 1635.62,-440.97 1635.62,-440.97 1635.62,-437.01 1639.58,-433.05 1643.54,-433.05 1643.54,-433.05 1834.96,-433.05 1834.96,-433.05 1838.92,-433.05 1842.88,-437.01 1842.88,-440.97 1842.88,-440.97 1842.88,-448.88 1842.88,-448.88 1842.88,-452.84 1838.92,-456.8 1834.96,-456.8"/>
<text text-anchor="middle" x="1739.25" y="-439.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/drop&#45;down/index.js</text>
</g>
<!-- components/main&#45;button/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down/index.js -->
<g id="edge30" class="edge">
<title>components/main&#45;button/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down/index.js</title>
<path fill="none" stroke="#757575" d="M1566.41,-444.93C1585.75,-444.93 1605.33,-444.93 1624.01,-444.93"/>
<polygon fill="#757575" stroke="#757575" points="1624.01,-448.43 1634.01,-444.93 1624.01,-441.43 1624.01,-448.43"/>
</g>
<!-- components/drop&#45;down&#45;item/index.js -->
<g id="node22" class="node">
<title>components/drop&#45;down&#45;item/index.js</title>
<path fill="none" stroke="#ff6c60" d="M2119.83,-418.8C2119.83,-418.8 1897.67,-418.8 1897.67,-418.8 1893.71,-418.8 1889.75,-414.84 1889.75,-410.88 1889.75,-410.88 1889.75,-402.97 1889.75,-402.97 1889.75,-399.01 1893.71,-395.05 1897.67,-395.05 1897.67,-395.05 2119.83,-395.05 2119.83,-395.05 2123.79,-395.05 2127.75,-399.01 2127.75,-402.97 2127.75,-402.97 2127.75,-410.88 2127.75,-410.88 2127.75,-414.84 2123.79,-418.8 2119.83,-418.8"/>
<text text-anchor="middle" x="2008.75" y="-401.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/drop&#45;down&#45;item/index.js</text>
</g>
<!-- components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down&#45;item/index.js -->
<g id="edge27" class="edge">
<title>components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down&#45;item/index.js</title>
<path fill="none" stroke="#757575" d="M1589.04,-404.08C1681.09,-404.7 1793.16,-405.47 1878.18,-406.05"/>
<polygon fill="#757575" stroke="#757575" points="1877.93,-409.54 1887.96,-406.11 1877.98,-402.54 1877.93,-409.54"/>
</g>
<!-- components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down/index.js -->
<g id="edge28" class="edge">
<title>components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/drop&#45;down/index.js</title>
<path fill="none" stroke="#757575" d="M1521.21,-415.27C1543.47,-418.05 1566.91,-421.04 1588.75,-423.93 1605.59,-426.16 1623.48,-428.6 1640.82,-431.01"/>
<polygon fill="#757575" stroke="#757575" points="1640.22,-434.46 1650.61,-432.38 1641.19,-427.53 1640.22,-434.46"/>
</g>
<!-- components/floating&#45;button/index.js -->
<g id="node26" class="node">
<title>components/floating&#45;button/index.js</title>
<path fill="none" stroke="#ff6c60" d="M1845.83,-376.8C1845.83,-376.8 1632.67,-376.8 1632.67,-376.8 1628.71,-376.8 1624.75,-372.84 1624.75,-368.88 1624.75,-368.88 1624.75,-360.97 1624.75,-360.97 1624.75,-357.01 1628.71,-353.05 1632.67,-353.05 1632.67,-353.05 1845.83,-353.05 1845.83,-353.05 1849.79,-353.05 1853.75,-357.01 1853.75,-360.97 1853.75,-360.97 1853.75,-368.88 1853.75,-368.88 1853.75,-372.84 1849.79,-376.8 1845.83,-376.8"/>
<text text-anchor="middle" x="1739.25" y="-359.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/floating&#45;button/index.js</text>
</g>
<!-- components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/floating&#45;button/index.js -->
<g id="edge29" class="edge">
<title>components/main&#45;button&#45;mobile/styled&#45;main&#45;button.js&#45;&gt;components/floating&#45;button/index.js</title>
<path fill="none" stroke="#757575" d="M1523.16,-390.59C1555.23,-386.76 1590.75,-382.52 1623.54,-378.61"/>
<polygon fill="#757575" stroke="#757575" points="1623.53,-382.14 1633.04,-377.48 1622.7,-375.19 1623.53,-382.14"/>
</g>
<!-- components/toggle&#45;button/index.js -->
<g id="node23" class="node">
<title>components/toggle&#45;button/index.js</title>
<path fill="none" stroke="#ff6c60" d="M2408.08,-418.8C2408.08,-418.8 2201.67,-418.8 2201.67,-418.8 2197.71,-418.8 2193.75,-414.84 2193.75,-410.88 2193.75,-410.88 2193.75,-402.97 2193.75,-402.97 2193.75,-399.01 2197.71,-395.05 2201.67,-395.05 2201.67,-395.05 2408.08,-395.05 2408.08,-395.05 2412.04,-395.05 2416,-399.01 2416,-402.97 2416,-402.97 2416,-410.88 2416,-410.88 2416,-414.84 2412.04,-418.8 2408.08,-418.8"/>
<text text-anchor="middle" x="2304.88" y="-401.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/toggle&#45;button/index.js</text>
</g>
<!-- components/drop&#45;down&#45;item/index.js&#45;&gt;components/toggle&#45;button/index.js -->
<g id="edge23" class="edge">
<title>components/drop&#45;down&#45;item/index.js&#45;&gt;components/toggle&#45;button/index.js</title>
<path fill="none" stroke="#757575" d="M2128.11,-406.93C2145.87,-406.93 2164.22,-406.93 2182.05,-406.93"/>
<polygon fill="#757575" stroke="#757575" points="2181.86,-410.43 2191.86,-406.93 2181.86,-403.43 2181.86,-410.43"/>
</g>
<!-- components/toggle&#45;button/index.js&#45;&gt;components/ColorTheme/index.js -->
<g id="edge31" class="edge">
<title>components/toggle&#45;button/index.js&#45;&gt;components/ColorTheme/index.js</title>
<path fill="none" stroke="#757575" d="M2389.66,-394.55C2422.92,-389.64 2461.35,-383.96 2495.61,-378.9"/>
<polygon fill="#757575" stroke="#757575" points="2495.7,-382.43 2505.08,-377.51 2494.67,-375.5 2495.7,-382.43"/>
</g>
<!-- components/drop&#45;down/index.js&#45;&gt;components/drop&#45;down&#45;item/index.js -->
<g id="edge24" class="edge">
<title>components/drop&#45;down/index.js&#45;&gt;components/drop&#45;down&#45;item/index.js</title>
<path fill="none" stroke="#757575" d="M1827.1,-432.59C1853.51,-428.84 1882.72,-424.69 1909.81,-420.84"/>
<polygon fill="#757575" stroke="#757575" points="1909.97,-424.35 1919.38,-419.48 1908.99,-417.42 1909.97,-424.35"/>
</g>
<!-- components/floating&#45;button/floating&#45;button.js -->
<g id="node25" class="node">
<title>components/floating&#45;button/floating&#45;button.js</title>
<path fill="none" stroke="#ff6c60" d="M2438.08,-376.8C2438.08,-376.8 2171.67,-376.8 2171.67,-376.8 2167.71,-376.8 2163.75,-372.84 2163.75,-368.88 2163.75,-368.88 2163.75,-360.97 2163.75,-360.97 2163.75,-357.01 2167.71,-353.05 2171.67,-353.05 2171.67,-353.05 2438.08,-353.05 2438.08,-353.05 2442.04,-353.05 2446,-357.01 2446,-360.97 2446,-360.97 2446,-368.88 2446,-368.88 2446,-372.84 2442.04,-376.8 2438.08,-376.8"/>
<text text-anchor="middle" x="2304.88" y="-359.5" font-family="Arial" font-size="14.00" fill="#ff6c60">components/floating&#45;button/floating&#45;button.js</text>
</g>
<!-- components/floating&#45;button/floating&#45;button.js&#45;&gt;components/ColorTheme/index.js -->
<g id="edge25" class="edge">
<title>components/floating&#45;button/floating&#45;button.js&#45;&gt;components/ColorTheme/index.js</title>
<path fill="none" stroke="#757575" d="M2446.4,-364.93C2454.39,-364.93 2462.39,-364.93 2470.29,-364.93"/>
<polygon fill="#757575" stroke="#757575" points="2470.28,-368.43 2480.28,-364.93 2470.28,-361.43 2470.28,-368.43"/>
</g>
<!-- components/floating&#45;button/index.js&#45;&gt;components/floating&#45;button/floating&#45;button.js -->
<g id="edge26" class="edge">
<title>components/floating&#45;button/index.js&#45;&gt;components/floating&#45;button/floating&#45;button.js</title>
<path fill="none" stroke="#757575" d="M1853.97,-364.93C1939.72,-364.93 2058.19,-364.93 2152.03,-364.93"/>
<polygon fill="#757575" stroke="#757575" points="2151.84,-368.43 2161.84,-364.93 2151.84,-361.43 2151.84,-368.43"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@ -144317,6 +144317,126 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>WebhookCreated</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>WebhookCreationHint</name>
<description/>

View File

@ -8,8 +8,8 @@
]
},
"engines": {
"node": ">=18",
"yarn": ">=3"
"node": ">=20",
"yarn": ">=4"
},
"scripts": {
"build": "node ./common/scripts/before-build.js && yarn workspaces foreach -vptiR --from '{@docspace/client,@docspace/login,@docspace/editor,@docspace/management}' run build",
@ -44,5 +44,5 @@
"shx": "^0.3.4",
"terser": "^5.16.6"
},
"packageManager": "yarn@3.2.4"
"packageManager": "yarn@4.0.2"
}

View File

@ -38,7 +38,7 @@
"BackupCreatedSuccess": "تم إنشاء النسخة الاحتياطية بنجاح.",
"BackupList": "قائمة النسخ الاحتياطي",
"BackupListWarningText": "إذا قمت بحذف أي عناصر من القائمة ، فسيتم أيضًا حذف الملفات المقابلة لها. لا يمكن التراجع عن هذا الإجراء. لحذف جميع الملفات استخدم الرابط:",
"BetaLabel": "بيتا",
"BetaLabel": "BETA",
"BlockingTime": "وقت الحظر (بالثانية)",
"Branding": "العلامة التجارية",
"BrandingSectionDescription": "حدد معلومات شركتك، وأضف روابط إلى الموارد الخارجية وعناوين البريد الإلكتروني المعروضة في واجهة DocSpace.",

View File

@ -8,12 +8,16 @@
"CustomRoomTitle": "Custom room",
"FillingFormsRoomDescription": "Build, share and fill document templates or work with the ready presets to quickly create documents of any type.",
"FillingFormsRoomTitle": "Filling forms room",
"FormRoomDescription": "Share forms with anyone and collect the complete forms in the Complete folder. Users can fill out any form multiple times creating separate final files. In Basic form rooms, you can't add multiple user roles to the forms.",
"FormRoomTitle": "Basic form room",
"Icon": "Icon",
"MakeRoomPrivateDescription": "All files in this room will be encrypted.",
"MakeRoomPrivateLimitationsWarningDescription": "With this feature, you can invite only existing DocSpace users. After creating a room, you will not be able to change the list of users.",
"MakeRoomPrivateTitle": "Make the Room Private",
"PublicRoomBarDescription": "This room is available to anyone with the link. External users will have View Only permission for all the files.",
"PublicRoomDescription": "Invite users via external links to view documents without registration. You can also embed this room into any web interface.",
"PublicRoomSystemFoldersDescription": "System folders store copies of forms at different stages of completion. Forms that are being filled are stored in In progress folder, and completed forms are stored in Complete folder.",
"PublicRoomSystemFoldersTitle": "System Folders",
"ReviewRoomDescription": "Request a review or comments on the documents",
"ReviewRoomTitle": "Review room",
"RoomEditing": "Room editing",

View File

@ -15,6 +15,8 @@
"ArchiveEmptyScreenUser": "Rooms that have been archived will appear here.",
"Archives": "Archives",
"AssignOwner": "Assign Owner",
"BadgeAlertDescription": "Several roles are specified in this form. Forms with multiple roles are not available for filling in this type of room",
"BadgeMyDraftTitle": "My draft",
"BackToParentFolderButton": "Back to parent folder",
"ByAuthor": "Author",
"ByCreation": "Created",
@ -56,6 +58,14 @@
"EmptyFilterSubheadingText": "No files to be displayed for this filter here",
"EmptyFolderDecription": "Drop files here or create new ones",
"EmptyFolderDescriptionUser": "Files and folders uploaded by admins will appear here.",
"EmptyFolderHeader": "No files in this folder",
"EmptyFormFolderDoneHeaderText": "No finished forms yet",
"EmptyFormFolderDoneDescriptionText": "This section will display all forms that are complete.",
"EmptyFormFolderProgressHeaderText": "Nothing here yet",
"EmptyFormFolderProgressDescriptionText": "This section will display the forms in progress.",
"EmptyFormSubFolderHeaderText": "No files in this folder yet",
"EmptyFormSubFolderDoneDescriptionText": "Here you will find forms which have been completely filled out by other users.",
"EmptyFormSubFolderProgressDescriptionText": "Here you will find forms in progress, i.e. forms which users have started to fill out but haven't completed. ",
"EmptyRecycleBin": "Empty Trash",
"EmptyRootRoomHeader": "Welcome to DocSpace",
"EmptyScreenFolder": "No docs here yet",
@ -72,6 +82,7 @@
"Folder": "Folder",
"FolderRemoved": "Folder moved to Trash",
"FolderRenamed": "The folder '{{folderTitle}}' is renamed to '{{newFoldedTitle}}'",
"FormRoom": "Form room",
"Forms": "Forms",
"FormsTemplates": "Forms templates",
"GeneralLink": "General link",
@ -106,6 +117,7 @@
"MoveToFolderMessage": "You can't move the folder to its subfolder",
"MoveToPublicRoom": "This room and all its contents are available to anyone with the link. Do you want to continue?",
"MoveToPublicRoomTitle": "Move to Public room",
"MyDocuments": "My documents",
"New": "New",
"NewRoom": "New room",
"NoAccessRoomDescription": "You will be redirected to the My Rooms automatically in 5 seconds.",
@ -128,7 +140,9 @@
"PrivateRoomHeader": "Welcome to ONLYOFFICE private room where every symbol you type is encrypted",
"PrivateRoomSupport": "Work in Private Room is available via {{organizationName}} desktop app. <3>Instructions</3>",
"PublicRoom": "Public room",
"RecentlyAccessible": "Recently accessible via link",
"RecentEmptyContainerDescription": "Your last viewed or edited docs will be displayed in this section.",
"RecentViaLinkEmptyContainerDescription": "Here you will find a list of the recently opened files shared with you via an external link.",
"RecycleBinAction": "Empty trash",
"RemovedFromFavorites": "Removed from favorites",
"RemoveFromFavorites": "Remove from favorites",
@ -152,6 +166,8 @@
"SelectorEmptyScreenHeader": "No files and folders here yet",
"SendByEmail": "Send by email",
"Share": "Share",
"ShareFolder": "Share folder",
"ShareFolderDescription": "A new room will be created and all the contents of the selected folder will be copied there. Afterwards, you can invite other users to collaborate on the files within a room.",
"ShareRoom": "Share room",
"ShowLinkActions": "Show link actions",
"ShowVersionHistory": "Show version history",

View File

@ -1,19 +1,35 @@
{
"AddGroupsForSharingButton": "Add groups",
"AddShareMessage": "Add message",
"AdditionalLinks": "Additional links",
"AdditionalLinkRemove": "Additional link remove",
"AnyoneWithLink": "Anyone with the link",
"Comment": "Comment",
"CopyExternalLink": "Copy external link",
"CreateAndCopy": "Create and copy",
"CustomFilter": "Custom filter",
"DenyAccess": "Deny access",
"DoсSpaceUsersOnly": "DoсSpace users only",
"Editing": "Editing",
"EncryptedFileSharing": "File <strong>{{title}}</strong> successfully shared",
"ExternalLink": "External link",
"FormFilling": "Form filling",
"GeneralAccessLink": "General access link",
"GeneralAccessLinkCopied": "General link successfully copied to clipboard",
"GeneralAccessLinkCreated": "General link for public viewing successfully created and copied to clipboard",
"GeneralAccessLinkRemove": "General access link remove",
"InternalLink": "Internal link",
"LinkAccessDenied": "Access to the link has been denied",
"LinkName": "Link name",
"LinkExpireAfter": "The link will expire after <1>{{date}}</1>",
"LinkExpired": "The link has expired.",
"LinkIsValid": "The link is valid for <1>{{date}}</1>",
"Notify users": "Notify users",
"ReadOnly": "Read only",
"ShareEmailBody": "You have been granted access to the {{itemName}} document. Click the link below to open the document right now: {{shareLink}}.",
"ShareEmailSubject": "You have been granted access to the {{itemName}} document",
"ShareDocument": "Share this document",
"ShareDocumentDescription": "Provide access to the document and set the permission levels.",
"ShareVia": "Share via",
"SharingSettingsTitle": "Sharing settings"
}

View File

@ -45,6 +45,7 @@
"UnselectAll": "Unselect all",
"URL": "URL",
"ViewRawPayload": "View raw payload",
"WebhookCreated": "Webhook created",
"WebhookCreationHint": "This webhook will be assigned to all events in DocSpace",
"WebhookDetails": "Webhook details",
"WebhookEditedSuccessfully": "Webhook configuration edited successfully",

View File

@ -38,7 +38,7 @@
"BackupCreatedSuccess": "Պահուստային պատճենը հաջողությամբ ստեղծվել է:",
"BackupList": "Պահուստի ցուցակ",
"BackupListWarningText": "Եթե ​​ցանկից որևէ միավոր ջնջեք, դրանց համապատասխան ֆայլերը նույնպես կջնջվեն: Այս գործողությունը հնարավոր չէ հետարկել:Բոլոր ֆայլերը ջնջելու համար օգտագործեք հղումը.",
"BetaLabel": "ԲԵՏԱ",
"BetaLabel": "BETA",
"BlockingTime": "Արգելափակման ժամանակը (վրկ)",
"Branding": "Բրենդինգ",
"BrandingSectionDescription": "Նշեք ձեր ընկերության տվյալները, ավելացրեք հղումներ դեպի արտաքին ռեսուրսներ և էլփոստի հասցեներ, որոնք ցուցադրվում են DocSpace ինտերֆեյսում:",

View File

@ -38,7 +38,7 @@
"BackupCreatedSuccess": "백업 복사본 생성에 성공했습니다.",
"BackupList": "백업 목록",
"BackupListWarningText": "목록에서 항목을 삭제하면 그에 상응하는 파일도 삭제됩니다. 이 작업은 취소할 수 없습니다. 모든 파일을 삭제하려면 다음 링크를 사용하시기 바랍니다:",
"BetaLabel": "베타",
"BetaLabel": "BETA",
"BlockingTime": "차단 시간(초)",
"Branding": "브랜딩",
"BrandingSectionDescription": "회사 정보를 지정하고 DocSpace 인터페이스 내에 표시되는 이메일 주소 및 외부 리소스에 대한 링크를 추가하세요.",

View File

@ -35,6 +35,7 @@
"BackupCreatedSuccess": "ສຳເນົາສໍາຮອງໄດ້ຖືກສ້າງສຳເລັດແລ້ວ.",
"BackupList": "ສໍາຮອງຂໍ້ມູນ ລາຍການ",
"BackupListWarningText": "ຖ້າທ່ານລຶບລາຍການໃດໆອອກຈາກບັນຊີລາຍຊື່, ໄຟລ໌ທີ່ສອດຄ້ອງກັນຂອງພວກມັນຈະຖືກລຶບຖິ້ມ. ການດໍາເນີນການນີ້ບໍ່ສາມາດຍົກເລີກໄດ້. ເພື່ອລຶບໄຟລ໌ທັງຫມົດໃຫ້ໃຊ້ການເຊື່ອມຕໍ່:",
"BetaLabel": "BETA",
"Branding": "ຍີ່ຫໍ້",
"BrandingSectionDescription": "ລະບຸຂໍ້ມູນບໍລິສັດຂອງທ່ານ, ເພີ່ມການເຊື່ອມຕໍ່ກັບຊັບພະຍາກອນພາຍນອກ ແລະທີ່ຢູ່ອີເມວທີ່ສະແດງຢູ່ໃນ ສ່ວນຕິດຕໍ່ DocSpace.",
"BrandingSubtitle": "ໃຊ້ຕົວເລືອກນີ້ເພື່ອສະໜອງປະສົບການໃນຍີ່ຫໍ້ໃຫ້ກັບຜູ້ໃຊ້.",

View File

@ -38,7 +38,7 @@
"BackupCreatedSuccess": "Резервная копия успешно создана.",
"BackupList": "Список резервных копий",
"BackupListWarningText": "При удалении любых элементов из списка соответствующие им файлы тоже будут удалены. Это действие необратимо. Для удаления всех файлов используйте ссылку:",
"BetaLabel": "БЕТА",
"BetaLabel": "BETA",
"BlockingTime": "Время блокировки (сек)",
"Branding": "Брендинг",
"BrandingSectionDescription": "Укажите информацию о своей компании, добавьте ссылки на внешние ресурсы и адреса электронной почты, отображаемые в интерфейсе DocSpace.",

View File

@ -45,6 +45,7 @@
"UnselectAll": "Отменить выбор для всех",
"URL": "URL",
"ViewRawPayload": "Просмотр исходной полезной нагрузки",
"WebhookCreated": "Вебхук создан",
"WebhookCreationHint": "Этот вебхук будет назначен всем событиям в DocSpace",
"WebhookDetails": "Сведения о вебхуке",
"WebhookEditedSuccessfully": "Конфигурация вебхука успешно отредактирована",

View File

@ -38,7 +38,7 @@
"BackupCreatedSuccess": "备份副本已成功创建。",
"BackupList": "备份列表",
"BackupListWarningText": "若您从列表中删除任何项目,其相应的文件也将被删除。此操作无法撤消。若想删除所有文件,请使用以下链接:",
"BetaLabel": "测试版",
"BetaLabel": "BETA",
"BlockingTime": "锁定时间(秒)",
"Branding": "品牌",
"BrandingSectionDescription": "在协作空间界面中展示您的公司信息,添加外部资源链接与邮件地址。",

View File

@ -1,5 +1,5 @@
const path = require("path");
const beforeBuild = require("@docspace/common/utils/beforeBuild");
const beforeBuild = require("@docspace/shared/utils/beforeBuild");
beforeBuild(
[

View File

@ -1,4 +1,4 @@
//import "@docspace/common/utils/wdyr";
// import "@docspace/shared/utils/wdyr";
import React from "react";
import { RouterProvider } from "react-router-dom";

View File

@ -8,8 +8,8 @@ import {
updateTempContent,
showLoader,
hideLoader,
} from "@docspace/common/utils";
import { regDesktop } from "@docspace/common/desktop";
} from "@docspace/shared/utils/common";
import { regDesktop } from "@docspace/shared/utils/desktop";
import { toastr } from "@docspace/shared/components/toast";

View File

@ -3,7 +3,7 @@ import styled from "styled-components";
import { ReactSVG } from "react-svg";
import { mobile } from "@docspace/shared/utils";
import { inject, observer } from "mobx-react";
import { getLogoFromPath } from "@docspace/common/utils";
import { getLogoFromPath } from "@docspace/shared/utils";
const StyledWrapper = styled.div`
.logo-wrapper {

View File

@ -1,7 +1,7 @@
import React from "react";
import { inject, observer } from "mobx-react";
import { ShareAccessRights, FileStatus } from "@docspace/common/constants";
import { combineUrl } from "@docspace/common/utils";
import { ShareAccessRights, FileStatus } from "@docspace/shared/enums";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import Badges from "../components/Badges";
import config from "PACKAGE_FILE";
@ -111,23 +111,26 @@ export default function withBadges(WrappedComponent) {
isAdmin,
isVisitor,
isDesktopClient,
sectionWidth,
viewAs,
isMutedBadge,
isArchiveFolderRoot,
isArchiveFolder,
isPublicRoom,
isRecentTab,
} = this.props;
const { fileStatus, access, mute } = item;
const newItems =
item.new ||
(!mute && (fileStatus & FileStatus.IsNew) === FileStatus.IsNew);
const showNew = !!newItems;
const showNew = !!newItems && !isPublicRoom;
const accessToEdit =
access === ShareAccessRights.FullAccess ||
access === ShareAccessRights.None; // TODO: fix access type for owner (now - None)
const canEditing = access === ShareAccessRights.Editing;
const badgesComponent = (
<Badges
t={t}
@ -137,7 +140,6 @@ export default function withBadges(WrappedComponent) {
isVisitor={isVisitor}
showNew={showNew}
newItems={newItems}
sectionWidth={sectionWidth}
isTrashFolder={isTrashFolder}
isPrivacyFolder={isPrivacyFolder}
isArchiveFolderRoot={isArchiveFolderRoot}
@ -153,6 +155,8 @@ export default function withBadges(WrappedComponent) {
isMutedBadge={isMutedBadge}
onCopyPrimaryLink={this.onCopyPrimaryLink}
isArchiveFolder={isArchiveFolder}
isRecentTab={isRecentTab}
canEditing={canEditing}
/>
);
@ -180,6 +184,7 @@ export default function withBadges(WrappedComponent) {
isPrivacyFolder,
isArchiveFolderRoot,
isArchiveFolder,
isRecentTab,
} = treeFoldersStore;
const { markAsRead, setPinAction, setMuteAction } = filesActionsStore;
const { isTabletView, isDesktopClient, theme } = auth.settingsStore;
@ -218,6 +223,8 @@ export default function withBadges(WrappedComponent) {
isMutedBadge,
getPrimaryLink,
isArchiveFolder,
isPublicRoom: publicRoomStore.isPublicRoom,
isRecentTab,
};
}
)(observer(WithBadges));

View File

@ -5,8 +5,8 @@ import {
// FileAction,
FileStatus,
ShareAccessRights,
} from "@docspace/common/constants";
//import { combineUrl } from "@docspace/common/utils";
} from "@docspace/shared/enums";
//import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { getCorrectDate, getCookie } from "@docspace/shared/utils";
import { LANGUAGE } from "@docspace/shared/constants";
import config from "PACKAGE_FILE";

View File

@ -1,7 +1,7 @@
import React from "react";
import { inject, observer } from "mobx-react";
import { DeviceType } from "@docspace/common/constants";
import { DeviceType } from "@docspace/shared/enums";
export default function withFileActions(WrappedFileItem) {
class WithFileActions extends React.Component {
@ -53,10 +53,12 @@ export default function withFileActions(WrappedFileItem) {
};
onDrop = (items) => {
const { isTrashFolder, dragging, setDragging } = this.props;
const { isTrashFolder, dragging, setDragging, isDisabledDropItem } =
this.props;
const { fileExst, id } = this.props.item;
if (isTrashFolder) return dragging && setDragging(false);
if (isTrashFolder || isDisabledDropItem)
return dragging && setDragging(false);
if (!fileExst) {
this.onDropZoneUpload(items, id);
@ -81,6 +83,7 @@ export default function withFileActions(WrappedFileItem) {
isSelected,
setSelection,
currentDeviceType,
isDisabledItemId,
} = this.props;
const { isThirdPartyFolder } = item;
@ -200,7 +203,7 @@ export default function withFileActions(WrappedFileItem) {
item.foldersCount === 0
) {
setParentId(item.parentId);
setRoomType(item.roomType);
// setRoomType(item.roomType);
}
openFileAction(item);
@ -249,10 +252,16 @@ export default function withFileActions(WrappedFileItem) {
itemIndex,
currentDeviceType,
isDisabledDropItem,
} = this.props;
const { access, id } = item;
const isDragging = isFolder && access < 2 && !isTrashFolder && !isPrivacy;
const isDragging =
!isDisabledDropItem &&
isFolder &&
access < 2 &&
!isTrashFolder &&
!isPrivacy;
let className = isDragging ? " droppable" : "";
if (draggable) className += " draggable";
@ -364,7 +373,10 @@ export default function withFileActions(WrappedFileItem) {
(x) => x.id === item.id && x.fileExst === item.fileExst
);
const draggable = !isRecycleBinFolder && selectedItem;
const isDisabledDropItem = !item.security.Create;
const draggable =
!isRecycleBinFolder && selectedItem && !isDisabledDropItem;
const isFolder = selectedItem ? false : !item.isFolder ? false : true;
@ -448,6 +460,7 @@ export default function withFileActions(WrappedFileItem) {
setSelection,
currentDeviceType: auth.settingsStore.currentDeviceType,
isDisabledDropItem,
};
}
)(observer(WithFileActions));

View File

@ -2,10 +2,10 @@ import { useEffect, useState } from "react";
import { useHotkeys } from "react-hotkeys-hook";
import { observer, inject } from "mobx-react";
import { useNavigate } from "react-router-dom";
import { Events } from "@docspace/common/constants";
import { Events } from "@docspace/shared/enums";
import { toastr } from "@docspace/shared/components/toast";
import throttle from "lodash/throttle";
import { checkDialogsOpen } from "@docspace/common/utils/checkDialogsOpen";
import { checkDialogsOpen } from "@docspace/shared/utils/checkDialogsOpen";
const withHotkeys = (Component) => {
const WithHotkeys = (props) => {

View File

@ -53,6 +53,16 @@ export default function withQuickButtons(WrappedComponent) {
.catch((err) => toastr.error(err));
};
onClickShare = async () => {
const { t, item, getPrimaryFileLink, setShareChanged } = this.props;
const primaryLink = await getPrimaryFileLink(item.id);
if (primaryLink) {
copy(primaryLink.sharedTo.shareLink);
toastr.success(t("Files:LinkSuccessfullyCopied"));
setShareChanged(true);
}
};
onCopyPrimaryLink = async () => {
const { t, item, getPrimaryLink } = this.props;
const primaryLink = await getPrimaryLink(item.id);
@ -74,6 +84,7 @@ export default function withQuickButtons(WrappedComponent) {
viewAs,
folderCategory,
isPublicRoom,
isPersonalRoom,
isArchiveFolder,
} = this.props;
@ -87,9 +98,11 @@ export default function withQuickButtons(WrappedComponent) {
viewAs={viewAs}
isDisabled={isLoading}
isPublicRoom={isPublicRoom}
isPersonalRoom={isPersonalRoom}
onClickLock={this.onClickLock}
onClickDownload={this.onClickDownload}
onClickFavorite={this.onClickFavorite}
onClickShare={this.onClickShare}
folderCategory={folderCategory}
onCopyPrimaryLink={this.onCopyPrimaryLink}
isArchiveFolder={isArchiveFolder}
@ -120,6 +133,7 @@ export default function withQuickButtons(WrappedComponent) {
isPersonalFolderRoot,
isArchiveFolderRoot,
isTrashFolder,
isPersonalRoom,
isArchiveFolder,
} = treeFoldersStore;
@ -129,6 +143,7 @@ export default function withQuickButtons(WrappedComponent) {
isTrashFolder || isArchiveFolderRoot || isPersonalFolderRoot;
const { isPublicRoom } = publicRoomStore;
const { getPrimaryFileLink, setShareChanged } = auth.infoPanelStore;
return {
theme: auth.settingsStore.theme,
@ -139,8 +154,11 @@ export default function withQuickButtons(WrappedComponent) {
setSharingPanelVisible,
folderCategory,
isPublicRoom,
isPersonalRoom,
getPrimaryLink: filesStore.getPrimaryLink,
isArchiveFolder,
getPrimaryFileLink,
setShareChanged,
};
}
)(observer(WithQuickButtons));

View File

@ -1,6 +1,6 @@
import { useEffect, useContext } from "react";
import { DeviceType } from "@docspace/common/constants";
import { DeviceType } from "@docspace/shared/enums";
//@ts-ignore
import { isTablet, isMobile, Context } from "@docspace/shared/utils";
import { isMobile as isMobileDevice } from "react-device-detect";

View File

@ -11,7 +11,8 @@ import { ThemeProvider } from "@docspace/shared/components/theme-provider";
import { SnackBar } from "@docspace/shared/components/snackbar";
import { Portal } from "@docspace/shared/components/portal";
import { getLogoFromPath, updateTempContent } from "@docspace/common/utils";
import { updateTempContent } from "@docspace/shared/utils/common";
import { getLogoFromPath } from "@docspace/shared/utils";
import store from "client/store";
@ -21,15 +22,15 @@ import i18n from "./i18n";
import moment from "moment-timezone";
//import ReactSmartBanner from "./components/SmartBanner";
import { useThemeDetector } from "@docspace/common/utils/useThemeDetector";
import { useThemeDetector } from "@docspace/shared/hooks/useThemeDetector";
import { isMobile, isIOS, isFirefox } from "react-device-detect";
import IndicatorLoader from "./components/IndicatorLoader";
import DialogsWrapper from "./components/dialogs/DialogsWrapper";
import MainBar from "./components/MainBar";
import indexedDbHelper from "@docspace/common/utils/indexedDBHelper";
import { DeviceType, IndexedDBStores } from "@docspace/common/constants";
import { getRestoreProgress } from "@docspace/common/api/portal";
import indexedDbHelper from "@docspace/shared/utils/indexedDBHelper";
import { DeviceType, IndexedDBStores } from "@docspace/shared/enums";
import { getRestoreProgress } from "@docspace/shared/api/portal";
import { useTheme } from "styled-components";
const Shell = ({ items = [], page = "home", ...rest }) => {

View File

@ -1,7 +1,7 @@
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
//import { registerSW } from "@docspace/common/sw/helper";
//import { registerSW } from "@docspace/shared/sw/helper";
const container = document.getElementById("root");
const root = createRoot(container);

View File

@ -2,8 +2,8 @@
import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import { PageType } from "@docspace/common/constants";
import { getCatalogIconUrlByType } from "@docspace/common/utils/catalogIcon.helper";
import { PageType } from "@docspace/shared/enums";
import { getCatalogIconUrlByType } from "@docspace/shared/utils/catalogIconHelper";
import { ArticleItem } from "@docspace/shared/components/article-item";

View File

@ -3,7 +3,7 @@ import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
import { ArticleItem } from "@docspace/shared/components/article-item";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { useNavigate } from "react-router-dom";
import GiftReactSvgUrl from "PUBLIC_DIR/images/gift.react.svg?url";

View File

@ -7,10 +7,10 @@ import { withTranslation } from "react-i18next";
import {
FolderType,
ShareAccessRights,
FolderNames,
DeviceType,
} from "@docspace/common/constants";
import { getCatalogIconUrlByType } from "@docspace/common/utils/catalogIcon.helper";
} from "@docspace/shared/enums";
import { FOLDER_NAMES } from "@docspace/shared/constants";
import { getCatalogIconUrlByType } from "@docspace/shared/utils/catalogIconHelper";
import { ArticleItem } from "@docspace/shared/components/article-item";
import DragAndDrop from "@docspace/shared/components/drag-and-drop/DragAndDrop";
@ -236,10 +236,13 @@ const Items = ({
return true;
}
if (
(item.rootFolderType === FolderType.TRASH && startDrag && !isArchive) ||
item.rootFolderType === FolderType.USER
) {
if (item.rootFolderType === FolderType.TRASH && startDrag && !isArchive) {
return draggableItems.some(
(draggableItem) => draggableItem.security.Delete
);
}
if (item.rootFolderType === FolderType.USER) {
return (
folderAccess === ShareAccessRights.None ||
folderAccess === ShareAccessRights.FullAccess ||
@ -312,7 +315,7 @@ const Items = ({
showBadge={showBadge}
labelBadge={labelBadge}
iconBadge={iconBadge}
folderId={`document_catalog-${FolderNames[item.rootFolderType]}`}
folderId={`document_catalog-${FOLDER_NAMES[item.rootFolderType]}`}
/>
);
});

View File

@ -5,13 +5,13 @@ import { withTranslation } from "react-i18next";
import { useNavigate, useLocation } from "react-router-dom";
import { DeviceType, RoomSearchArea } from "@docspace/common/constants";
import { DeviceType, RoomSearchArea } from "@docspace/shared/enums";
import Items from "./Items";
import { tablet } from "@docspace/shared/utils";
import FilesFilter from "@docspace/common/api/files/filter";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import AccountsFilter from "@docspace/common/api/people/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
import AccountsFilter from "@docspace/shared/api/people/filter";
import Banner from "./Banner";

View File

@ -28,11 +28,11 @@ import { useNavigate, useLocation } from "react-router-dom";
import MobileView from "./MobileView";
import { Events, EmployeeType, DeviceType } from "@docspace/common/constants";
import { Events, EmployeeType, DeviceType } from "@docspace/shared/enums";
import styled, { css } from "styled-components";
import { resendInvitesAgain } from "@docspace/common/api/people";
import { resendInvitesAgain } from "@docspace/shared/api/people";
import { getCorrectFourValuesStyle } from "@docspace/shared/utils";
const StyledButton = styled(Button)`

View File

@ -1,26 +1,23 @@
import UnpinReactSvgUrl from "PUBLIC_DIR/images/unpin.react.svg?url";
import styled from "styled-components";
import React, { useState } from "react";
import UnpinReactSvgUrl from "PUBLIC_DIR/images/unpin.react.svg?url";
import RefreshReactSvgUrl from "PUBLIC_DIR/images/refresh.react.svg?url";
import FormFillRectSvgUrl from "PUBLIC_DIR/images/form.fill.rect.svg?url";
import AccessEditFormReactSvgUrl from "PUBLIC_DIR/images/access.edit.form.react.svg?url";
import FileActionsConvertEditDocReactSvgUrl from "PUBLIC_DIR/images/file.actions.convert.edit.doc.react.svg?url";
import LinkReactSvgUrl from "PUBLIC_DIR/images/link.react.svg?url";
import TabletLinkReactSvgUrl from "PUBLIC_DIR/images/tablet-link.reat.svg?url";
import RefreshReactSvgUrl from "PUBLIC_DIR/images/refresh.react.svg?url";
import Refresh12ReactSvgUrl from "PUBLIC_DIR/images/icons/12/refresh.react.svg?url";
import Mute12ReactSvgUrl from "PUBLIC_DIR/images/icons/12/mute.react.svg?url";
import Mute16ReactSvgUrl from "PUBLIC_DIR/images/icons/16/mute.react.svg?url";
import React, { useState } from "react";
import styled from "styled-components";
import { isMobile as isMobileDevice } from "react-device-detect";
import { Badge } from "@docspace/shared/components/badge";
import { ColorTheme, ThemeId } from "@docspace/shared/components/color-theme";
import {
FileStatus,
RoomsType,
ShareAccessRights,
} from "@docspace/common/constants";
import { RoomsType, ShareAccessRights } from "@docspace/shared/enums";
import { Base } from "@docspace/shared/themes";
import { isTablet, isDesktop, size, classNames } from "@docspace/shared/utils";
@ -68,7 +65,6 @@ const Badges = ({
t,
theme,
newItems,
sectionWidth,
item,
isTrashFolder,
isPrivacyFolder,
@ -87,6 +83,8 @@ const Badges = ({
isVisitor,
onCopyPrimaryLink,
isArchiveFolder,
isRecentTab,
canEditing,
}) => {
const {
id,
@ -101,6 +99,7 @@ const Badges = ({
mute,
rootFolderId,
new: newCount,
hasDraft,
} = item;
const showEditBadge = !locked || item.access === 0;
@ -108,6 +107,7 @@ const Badges = ({
const isForm = fileExst === ".oform";
const isPdf = fileExst === ".pdf";
const isTile = viewAs === "tile";
const isViewTable = viewAs === "table";
const countVersions = versionGroup > 999 ? "999+" : versionGroup;
@ -190,7 +190,23 @@ const Badges = ({
return fileExst ? (
<div className="badges additional-badges file__badges">
{isEditing && !isVisitor && !isPdf && (
{hasDraft && (
<BadgeWrapper isTile={isTile}>
<Badge
noHover
isVersionBadge
className="badge-version badge-version-current tablet-badge icons-group"
backgroundColor={theme.filesBadges.badgeBackgroundColor}
label={t("BadgeMyDraftTitle")}
title={t("BadgeMyDraftTitle")}
{...versionBadgeProps}
style={{
width: "max-content",
}}
/>
</BadgeWrapper>
)}
{isEditing && !isVisitor && !isPdf && !(isRecentTab && !canEditing) && (
<ColorTheme
themeId={ThemeId.IconButton}
isEditing={isEditing}
@ -239,6 +255,17 @@ const Badges = ({
/>
</BadgeWrapper>
)}
{/* {isForm && (
<BadgeWrapper isTile={isTile}>
<HelpButton
color="#F2675A"
place="bottom"
size={isViewTable ? 12 : 16}
className="bagde_alert icons-group"
tooltipContent={t("BadgeAlertDescription")}
/>
</BadgeWrapper>
)} */}
</div>
) : (
<div

View File

@ -0,0 +1,111 @@
import { FolderType } from "@docspace/shared/enums";
import EmptyScreenPersonalUrl from "PUBLIC_DIR/images/empty_screen_personal.svg?url";
import EmptyScreenPersonalDarkUrl from "PUBLIC_DIR/images/empty_screen_personal_dark.svg?url";
import EmptyScreenCorporateSvgUrl from "PUBLIC_DIR/images/empty_screen_corporate.svg?url";
import EmptyScreenCorporateDarkSvgUrl from "PUBLIC_DIR/images/empty_screen_corporate_dark.svg?url";
import EmptyScreenRoleSvgUrl from "PUBLIC_DIR/images/empty_screen_role.svg?url";
import EmptyScreenRoleDarkSvgUrl from "PUBLIC_DIR/images/empty_screen_role_dark.svg?url";
import EmptyScreenDoneSvgUrl from "PUBLIC_DIR/images/empty_screen_done.svg?url";
import EmptyScreenDoneDarkSvgUrl from "PUBLIC_DIR/images/empty_screen_done_dark.svg?url";
type ThemeType = "light" | "dark";
type FolderTypeOf = typeof FolderType;
type FolderTypeValueOfType = FolderTypeOf[keyof FolderTypeOf];
enum EmptyScreenTypeEnum {
Done = "emptyScreenDone",
InProgress = "emptyScreenInProgress",
Corporate = "emptyScreenCorporate",
Default = "emptyScreenDefault",
SubFolderDone = "emptyScreenSubFolderDone",
SubFolderinProgress = "emptyScreenSubFolderinProgress",
}
export const headerIconsUrl: Record<
ThemeType,
Record<EmptyScreenTypeEnum, string>
> = {
light: {
[EmptyScreenTypeEnum.Done]: EmptyScreenDoneSvgUrl,
[EmptyScreenTypeEnum.InProgress]: EmptyScreenRoleSvgUrl,
[EmptyScreenTypeEnum.Default]: EmptyScreenPersonalUrl,
[EmptyScreenTypeEnum.Corporate]: EmptyScreenCorporateSvgUrl,
[EmptyScreenTypeEnum.SubFolderDone]: EmptyScreenPersonalUrl,
[EmptyScreenTypeEnum.SubFolderinProgress]: EmptyScreenPersonalUrl,
},
dark: {
[EmptyScreenTypeEnum.Done]: EmptyScreenDoneDarkSvgUrl,
[EmptyScreenTypeEnum.InProgress]: EmptyScreenRoleDarkSvgUrl,
[EmptyScreenTypeEnum.Default]: EmptyScreenPersonalDarkUrl,
[EmptyScreenTypeEnum.Corporate]: EmptyScreenCorporateDarkSvgUrl,
[EmptyScreenTypeEnum.SubFolderDone]: EmptyScreenPersonalDarkUrl,
[EmptyScreenTypeEnum.SubFolderinProgress]: EmptyScreenPersonalDarkUrl,
},
};
export const translateHeaderKey: Record<EmptyScreenTypeEnum, string> = {
[EmptyScreenTypeEnum.Done]: "EmptyFormFolderDoneHeaderText",
[EmptyScreenTypeEnum.InProgress]: "EmptyFormFolderProgressHeaderText",
[EmptyScreenTypeEnum.Default]: "EmptyScreenFolder",
[EmptyScreenTypeEnum.Corporate]: "RoomCreated",
[EmptyScreenTypeEnum.SubFolderDone]: "EmptyFormSubFolderHeaderText",
[EmptyScreenTypeEnum.SubFolderinProgress]: "EmptyFormSubFolderHeaderText",
};
export const translateDescriptionKey: Record<EmptyScreenTypeEnum, string> = {
[EmptyScreenTypeEnum.Done]: "EmptyFormFolderDoneDescriptionText",
[EmptyScreenTypeEnum.InProgress]: "EmptyFormFolderProgressDescriptionText",
[EmptyScreenTypeEnum.Default]: "EmptyFolderDescriptionUser",
[EmptyScreenTypeEnum.Corporate]: "EmptyFolderDecription",
[EmptyScreenTypeEnum.SubFolderDone]: "EmptyFormSubFolderDoneDescriptionText",
[EmptyScreenTypeEnum.SubFolderinProgress]:
"EmptyFormSubFolderProgressDescriptionText",
};
export const getThemeMode = (theme: { isBase: boolean }): ThemeType => {
return theme.isBase ? "light" : "dark";
};
export const getEmptyScreenType = (
type: FolderTypeValueOfType | null,
displayRoomCondition: boolean
): EmptyScreenTypeEnum => {
switch (true) {
case type === FolderType.Done:
return EmptyScreenTypeEnum.Done;
case type === FolderType.InProgress:
return EmptyScreenTypeEnum.InProgress;
case type === FolderType.SubFolderDone:
return EmptyScreenTypeEnum.SubFolderDone;
case type === FolderType.SubFolderInProgress:
return EmptyScreenTypeEnum.SubFolderinProgress;
case displayRoomCondition:
return EmptyScreenTypeEnum.Corporate;
default:
return EmptyScreenTypeEnum.Default;
}
};
export const getHeaderText = (
type: FolderTypeValueOfType | null,
displayRoomCondition: boolean,
t: Function
): string => {
const emptyType = getEmptyScreenType(type, displayRoomCondition);
const key = translateHeaderKey[emptyType];
return t(key);
};
export const getDescriptionText = (
type: FolderTypeValueOfType | null,
canCreateFiles: boolean,
t: Function
) => {
const emptyType = getEmptyScreenType(type, canCreateFiles);
const key = translateDescriptionKey[emptyType];
return t(key);
};

View File

@ -6,8 +6,8 @@ import { useNavigate, useLocation } from "react-router-dom";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import EmptyContainer from "./EmptyContainer";
import FilesFilter from "@docspace/common/api/files/filter";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
import { IconButton } from "@docspace/shared/components/icon-button";
import { Link } from "@docspace/shared/components/link";

View File

@ -1,60 +1,61 @@
import EmptyScreenPersonalUrl from "PUBLIC_DIR/images/empty_screen_personal.svg?url";
import EmptyScreenPersonalDarkUrl from "PUBLIC_DIR/images/empty_screen_personal_dark.svg?url";
import EmptyScreenCorporateSvgUrl from "PUBLIC_DIR/images/empty_screen_corporate.svg?url";
import EmptyScreenCorporateDarkSvgUrl from "PUBLIC_DIR/images/empty_screen_corporate_dark.svg?url";
import { useCallback, useMemo } from "react";
import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import EmptyContainer from "./EmptyContainer";
import CommonButtons from "./sub-components/CommonButtons";
import {
getDescriptionText,
getEmptyScreenType,
getHeaderText,
getThemeMode,
headerIconsUrl,
} from "./EmptyContainer.helper";
const EmptyFolderContainer = ({
t,
onCreate,
type, // folder type
linkStyles,
sectionWidth,
canCreateFiles,
theme,
roomType,
//isLoading,
isArchiveFolderRoot,
isEmptyPage,
}) => {
//const location = useLocation();
// const isRoom =
// isLoading && location?.state?.isRoom ? location?.state?.isRoom : !!roomType;
const isRoom = !!roomType;
const displayRoomCondition = isRoom && !isArchiveFolderRoot;
const buttons = <CommonButtons onCreate={onCreate} linkStyles={linkStyles} />;
const emptyScreenCorporateSvg = theme.isBase
? EmptyScreenCorporateSvgUrl
: EmptyScreenCorporateDarkSvgUrl;
const emptyScreenAltSvg = theme.isBase
? EmptyScreenPersonalUrl
: EmptyScreenPersonalDarkUrl;
const getIcon = useCallback(() => {
const themeMode = getThemeMode(theme);
const emptyScreenType = getEmptyScreenType(type, displayRoomCondition);
const icon = headerIconsUrl[themeMode][emptyScreenType];
return icon;
}, [theme.isBase, displayRoomCondition, type]);
const imageSrc = useMemo(getIcon, [getIcon]);
const headerText = useMemo(
() => getHeaderText(type, displayRoomCondition, t),
[t, displayRoomCondition, type]
);
const descriptionText = useMemo(
() => getDescriptionText(type, canCreateFiles, t),
[t, canCreateFiles, type]
);
return (
<EmptyContainer
headerText={
displayRoomCondition ? t("RoomCreated") : t("EmptyScreenFolder")
}
descriptionText={
canCreateFiles
? t("EmptyFolderDecription")
: t("EmptyFolderDescriptionUser")
}
imageSrc={
displayRoomCondition ? emptyScreenCorporateSvg : emptyScreenAltSvg
}
headerText={headerText}
descriptionText={descriptionText}
buttons={buttons}
sectionWidth={sectionWidth}
imageSrc={imageSrc}
isEmptyPage={isEmptyPage}
sectionWidth={sectionWidth}
/>
);
};

View File

@ -9,7 +9,7 @@ import { useNavigate } from "react-router-dom";
import EmptyContainer from "./EmptyContainer";
import { Link } from "@docspace/shared/components/link";
import { IconButton } from "@docspace/shared/components/icon-button";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
import { getCategoryUrl } from "SRC_DIR/helpers/utils";
import { CategoryType } from "SRC_DIR/helpers/constants";

View File

@ -4,7 +4,7 @@ import PlusSvgUrl from "PUBLIC_DIR/images/plus.svg?url";
import RoomsReactSvgUrl from "PUBLIC_DIR/images/rooms.react.svg?url";
import { useNavigate, useLocation } from "react-router-dom";
import { FolderType, RoomSearchArea } from "@docspace/common/constants";
import { FolderType, RoomSearchArea } from "@docspace/shared/enums";
import { inject, observer } from "mobx-react";
import { withTranslation, Trans } from "react-i18next";
import EmptyContainer from "./EmptyContainer";
@ -13,8 +13,8 @@ import { Box } from "@docspace/shared/components/box";
import { Text } from "@docspace/shared/components/text";
import { IconButton } from "@docspace/shared/components/icon-button";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import FilesFilter from "@docspace/common/api/files/filter";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
import { getCategoryUrl } from "SRC_DIR/helpers/utils";
import { CategoryType } from "SRC_DIR/helpers/constants";
@ -75,7 +75,7 @@ const RootFolderContainer = (props) => {
const noFilesHeader = t("NoFilesHereYet");
const trashDescription = t("TrashEmptyDescription");
const favoritesDescription = t("FavoritesEmptyContainerDescription");
const recentDescription = t("RecentEmptyContainerDescription");
const recentDescription = t("RecentViaLinkEmptyContainerDescription");
const roomsDescription =
isVisitor || isCollaborator
@ -294,7 +294,7 @@ const RootFolderContainer = (props) => {
const goToPersonalButtons = (
<div className="empty-folder_container-links">
<img
className="empty-folder_container-image"
className="empty-folder_container-icon"
src={PersonSvgUrl}
alt="person_icon"
onClick={onGoToPersonal}

View File

@ -4,7 +4,7 @@ import { observer, inject } from "mobx-react";
import RootFolderContainer from "./RootFolderContainer";
import EmptyFilterContainer from "./EmptyFilterContainer";
import EmptyFolderContainer from "./EmptyFolderContainer";
import { Events } from "@docspace/common/constants";
import { Events } from "@docspace/shared/enums";
import RoomNoAccessContainer from "./RoomNoAccessContainer";
const linkStyles = {
@ -20,6 +20,7 @@ const EmptyContainer = ({
//isLoading,
parentId,
theme,
type,
sectionWidth,
isRoomNotFoundOrMoved,
@ -80,6 +81,7 @@ const EmptyContainer = ({
sectionWidth={sectionWidth}
onCreate={onCreate}
linkStyles={linkStyles}
type={type}
/>
);
};
@ -114,6 +116,7 @@ export default inject(
isRoomNotFoundOrMoved,
isGracePeriod,
setInviteUsersWarningDialogVisible,
type: selectedFolderStore.type,
};
}
)(observer(EmptyContainer));

View File

@ -10,9 +10,9 @@ import { Link } from "@docspace/shared/components/link";
import { Box } from "@docspace/shared/components/box";
import { Text } from "@docspace/shared/components/text";
import { FolderType, RoomSearchArea } from "@docspace/common/constants";
import RoomsFilter from "@docspace/common/api/rooms/filter";
import FilesFilter from "@docspace/common/api/files/filter";
import { FolderType, RoomSearchArea } from "@docspace/shared/enums";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
import { getCategoryUrl, getCategoryType } from "SRC_DIR/helpers/utils";
import { CategoryType } from "SRC_DIR/helpers/constants";

View File

@ -2,7 +2,6 @@ import React from "react";
import { useTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import {
SharingPanel,
UploadPanel,
VersionHistoryPanel,
ChangeOwnerPanel,
@ -33,20 +32,20 @@ import {
SettingsPluginDialog,
PluginDialog,
DeletePluginDialog,
ShareFolderDialog,
} from "../dialogs";
import ConvertPasswordDialog from "../dialogs/ConvertPasswordDialog";
import ArchiveDialog from "../dialogs/ArchiveDialog";
import RestoreRoomDialog from "../dialogs/RestoreRoomDialog";
import PreparationPortalDialog from "../dialogs/PreparationPortalDialog";
import FilesSelector from "../FilesSelector";
import { FilesSelectorFilterTypes } from "@docspace/common/constants";
import { FilesSelectorFilterTypes } from "@docspace/shared/enums";
import LeaveRoomDialog from "../dialogs/LeaveRoomDialog";
import ChangeRoomOwnerPanel from "../panels/ChangeRoomOwnerPanel";
const Panels = (props) => {
const {
uploadPanelVisible,
sharingPanelVisible,
ownerPanelVisible,
copyPanelVisible,
moveToPanelVisible,
@ -89,6 +88,7 @@ const Panels = (props) => {
leaveRoomDialogVisible,
changeRoomOwnerIsVisible,
deletePluginDialogVisible,
shareFolderDialogVisible,
} = props;
const { t } = useTranslation(["Translations", "Common"]);
@ -114,12 +114,6 @@ const Panels = (props) => {
<PluginDialog isVisible={pluginDialogVisible} key={"plugin-dialog"} />
),
uploadPanelVisible && <UploadPanel key="upload-panel" />,
sharingPanelVisible && (
<SharingPanel
key="sharing-panel"
uploadPanelVisible={uploadPanelVisible}
/>
),
ownerPanelVisible && <ChangeOwnerPanel key="change-owner-panel" />,
(moveToPanelVisible ||
copyPanelVisible ||
@ -199,6 +193,7 @@ const Panels = (props) => {
changeRoomOwnerIsVisible && (
<ChangeRoomOwnerPanel key="change-room-owner" />
),
shareFolderDialogVisible && <ShareFolderDialog key="share-folder-dialog" />,
];
};
@ -213,7 +208,6 @@ export default inject(
pluginStore,
}) => {
const {
sharingPanelVisible,
ownerPanelVisible,
copyPanelVisible,
moveToPanelVisible,
@ -252,6 +246,7 @@ export default inject(
backupToPublicRoomVisible,
leaveRoomDialogVisible,
changeRoomOwnerIsVisible,
shareFolderDialogVisible,
} = dialogsStore;
const { preparationPortalDialogVisible } = backup;
@ -269,7 +264,6 @@ export default inject(
return {
preparationPortalDialogVisible,
sharingPanelVisible,
uploadPanelVisible,
ownerPanelVisible,
copyPanelVisible,
@ -312,6 +306,7 @@ export default inject(
leaveRoomDialogVisible,
changeRoomOwnerIsVisible,
deletePluginDialogVisible,
shareFolderDialogVisible,
};
}
)(observer(Panels));

View File

@ -1,11 +1,11 @@
import React from "react";
// @ts-ignore
import { getFolder, getFolderInfo } from "@docspace/common/api/files";
import { getFolder, getFolderInfo } from "@docspace/shared/api/files";
// @ts-ignore
import FilesFilter from "@docspace/common/api/files/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
// @ts-ignore
import { iconSize32 } from "@docspace/common/utils/image-helpers";
import { iconSize32 } from "@docspace/shared/utils/image-helpers";
import { PAGE_COUNT, defaultBreadCrumb } from "../utils";
@ -20,10 +20,27 @@ import {
FilesSelectorFilterTypes,
FilterType,
FolderType,
} from "@docspace/common/constants";
} from "@docspace/shared/enums";
import {
getIconPathByFolderType,
FolderTypeValueOf,
} from "@docspace/shared/utils/common";
//@ts-ignore
import { toastr } from "@docspace/shared/components/toast";
type Room = {
id: number;
title: string;
roomType: number;
filesCount: number;
foldersCount: number;
security: Security;
parentId: number;
rootFolderType: number;
type: FolderTypeValueOf;
};
const DEFAULT_FILE_EXTS = "file";
export const convertFoldersToItems = (
@ -31,7 +48,7 @@ export const convertFoldersToItems = (
disabledItems: any[],
filterParam?: string
) => {
const items = folders.map((room: any) => {
const items = folders.map((room: Room) => {
const {
id,
title,
@ -41,18 +58,11 @@ export const convertFoldersToItems = (
security,
parentId,
rootFolderType,
}: {
id: number;
title: string;
roomType: number;
filesCount: number;
foldersCount: number;
security: Security;
parentId: number;
rootFolderType: number;
type,
} = room;
const icon = iconSize32.get("folder.svg");
const folderIconPath = getIconPathByFolderType(type);
const icon = iconSize32.get(folderIconPath);
return {
id,

View File

@ -1,13 +1,13 @@
import React from "react";
// @ts-ignore
import { getRooms } from "@docspace/common/api/rooms";
import { getRooms } from "@docspace/shared/api/rooms";
// @ts-ignore
import RoomsFilter from "@docspace/common/api/rooms/filter";
import RoomsFilter from "@docspace/shared/api/rooms/filter";
// @ts-ignore
import { RoomsType } from "@docspace/common/constants";
import { RoomsType } from "@docspace/shared/enums";
// @ts-ignore
import { iconSize32 } from "@docspace/common/utils/image-helpers";
import { iconSize32 } from "@docspace/shared/utils/image-helpers";
import { PAGE_COUNT, defaultBreadCrumb } from "../utils";
@ -27,6 +27,9 @@ const getRoomLogo = (roomType: number) => {
case RoomsType.PublicRoom:
path = "public.svg";
break;
case RoomsType.FormRoom:
path = "form.svg";
break;
}
return iconSize32.get(path);
@ -92,8 +95,8 @@ const useRoomsHelper = ({
const filterValue = search
? search
: search === null
? ""
: searchValue || "";
? ""
: searchValue || "";
const page = startIndex / PAGE_COUNT;

View File

@ -1,8 +1,8 @@
import React from "react";
import { FolderType } from "@docspace/common/constants";
import { FolderType } from "@docspace/shared/enums";
// @ts-ignore
import { getFoldersTree } from "@docspace/common/api/files";
import { getFoldersTree } from "@docspace/shared/api/files";
import CatalogFolderReactSvgUrl from "PUBLIC_DIR/images/catalog.folder.react.svg?url";
import CatalogUserReactSvgUrl from "PUBLIC_DIR/images/catalog.user.react.svg?url";
@ -10,7 +10,7 @@ import CatalogUserReactSvgUrl from "PUBLIC_DIR/images/catalog.user.react.svg?url
import { useRootHelperProps, Item } from "../FilesSelector.types";
import { defaultBreadCrumb } from "../utils";
import { getCatalogIconUrlByType } from "@docspace/common/utils/catalogIcon.helper";
import { getCatalogIconUrlByType } from "@docspace/shared/utils/catalogIconHelper";
const useRootHelper = ({
setBreadCrumbs,

View File

@ -1,9 +1,9 @@
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "@docspace/common/utils/i18next-http-backend";
import Backend from "@docspace/shared/utils/i18next-http-backend";
import { LANGUAGE } from "@docspace/shared/constants";
import config from "PACKAGE_FILE";
import { getLtrLanguageForEditor } from "@docspace/common/utils";
import { getLtrLanguageForEditor } from "@docspace/shared/utils/common";
import { getCookie } from "@docspace/shared/utils";
import { loadLanguagePath } from "SRC_DIR/helpers/utils";
const newInstance = i18n.createInstance();

View File

@ -4,8 +4,8 @@ import { useTranslation } from "react-i18next";
// @ts-ignore
import Loaders from "@docspace/common/components/Loaders";
import { FolderType, RoomsType } from "@docspace/common/constants";
import { DeviceType } from "@docspace/common/constants";
import { FolderType, RoomsType } from "@docspace/shared/enums";
import { DeviceType } from "@docspace/shared/enums";
import { Selector } from "@docspace/shared/components/selector";
import { Aside } from "@docspace/shared/components/aside";
@ -13,6 +13,8 @@ import { Backdrop } from "@docspace/shared/components/backdrop";
import { Portal } from "@docspace/shared/components/portal";
import { toastr } from "@docspace/shared/components/toast";
import { RowLoader, SearchLoader } from "@docspace/shared/skeletons/selector";
import EmptyScreenFilterAltSvgUrl from "PUBLIC_DIR/images/empty_screen_filter_alt.svg?url";
import EmptyScreenFilterAltDarkSvgUrl from "PUBLIC_DIR/images/empty_screen_filter_alt_dark.svg?url";
import EmptyScreenAltSvgUrl from "PUBLIC_DIR/images/empty_screen_alt.svg?url";
@ -565,13 +567,13 @@ const FilesSelector = ({
isBreadCrumbsLoading={showBreadCrumbsLoader}
withSearch={withSearch && !isRoot && items ? items.length > 0 : !isRoot && isFirstLoad}
rowLoader={
<Loaders.SelectorRowLoader
<RowLoader
isMultiSelect={false}
isUser={isRoot}
isContainer={showLoader}
/>
}
searchLoader={<Loaders.SelectorSearchLoader />}
searchLoader={<SearchLoader />}
breadCrumbsLoader={<Loaders.SelectorBreadCrumbsLoader />}
alwaysShowFooter={true}
isNextPageLoading={isNextPageLoading}

View File

@ -1,4 +1,4 @@
import { FilesSelectorFilterTypes } from "@docspace/common/constants";
import { FilesSelectorFilterTypes } from "@docspace/shared/enums";
import { BreadCrumb, Security } from "./FilesSelector.types";
export const PAGE_COUNT = 100;

View File

@ -7,7 +7,7 @@ import { ChangeUserTypeDialog } from "../dialogs";
import { toastr } from "@docspace/shared/components/toast";
import { Link } from "@docspace/shared/components/link";
import { Text } from "@docspace/shared/components/text";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
const ChangeUserTypeEvent = ({
setVisible,

View File

@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
import { toastr } from "@docspace/shared/components/toast";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import config from "PACKAGE_FILE";

View File

@ -48,8 +48,8 @@ const CreateRoomEvent = ({
}, []);
useEffect(() => {
fetchTagsAction;
}, []);
fetchTagsAction();
}, [fetchTagsAction]);
useEffect(() => {
setCreateRoomDialogVisible(true);

View File

@ -2,9 +2,9 @@ import React, { useState, useEffect, useCallback } from "react";
import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
import { EditRoomDialog } from "../dialogs";
import { Encoder } from "@docspace/common/utils/encoder";
import api from "@docspace/common/api";
import { getRoomInfo } from "@docspace/common/api/rooms";
import { Encoder } from "@docspace/shared/utils/encoder";
import api from "@docspace/shared/api";
import { getRoomInfo } from "@docspace/shared/api/rooms";
import { toastr } from "@docspace/shared/components/toast";
const EditRoomEvent = ({

View File

@ -2,8 +2,8 @@ import { useState, useEffect, useCallback, useRef, memo } from "react";
import { inject, observer } from "mobx-react";
import { FileAction } from "@docspace/common/constants";
import { Events } from "@docspace/common/constants";
import { FileAction } from "@docspace/shared/enums";
import { Events } from "@docspace/shared/enums";
import CreateEvent from "./CreateEvent";
import RenameEvent from "./RenameEvent";

View File

@ -5,7 +5,7 @@ import { withTranslation } from "react-i18next";
import { ADS_TIMEOUT } from "@docspace/client/src/helpers/filesConstants";
import { getConvertedSize } from "@docspace/common/utils";
import { getConvertedSize } from "@docspace/shared/utils/common";
import { getBannerAttribute } from "@docspace/shared/utils";
import { SnackBar } from "@docspace/shared/components/snackbar";

View File

@ -1,6 +1,6 @@
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "@docspace/common/utils/i18next-http-backend";
import Backend from "@docspace/shared/utils/i18next-http-backend";
import { LANGUAGE } from "@docspace/shared/constants";
import config from "PACKAGE_FILE";
import { getCookie } from "@docspace/shared/utils";

View File

@ -19,7 +19,7 @@ import { inject, observer } from "mobx-react";
import i18n from "./i18n";
import PreparationPortalDialog from "../dialogs/PreparationPortalDialog";
import { Base } from "@docspace/shared/themes";
import { DeviceType } from "@docspace/common/constants";
import { DeviceType } from "@docspace/shared/enums";
const StyledContainer = styled.header`
height: 48px;

View File

@ -8,11 +8,11 @@ import { isMobileOnly, isMobile } from "react-device-detect";
import { useLocation } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { isDesktop, tablet, mobile } from "@docspace/shared/utils";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { NoUserSelect } from "@docspace/shared/utils";
import HeaderCatalogBurger from "./header-catalog-burger";
import { Base } from "@docspace/shared/themes";
import { getLogoFromPath } from "@docspace/common/utils";
import { getLogoFromPath } from "@docspace/shared/utils";
const Header = styled.header`
display: flex;

View File

@ -4,7 +4,7 @@ import PropTypes from "prop-types";
import styled from "styled-components";
import { inject, observer } from "mobx-react";
import { NoUserSelect } from "@docspace/shared/utils";
import { getLogoFromPath } from "@docspace/common/utils";
import { getLogoFromPath } from "@docspace/shared/utils";
const LogoItem = styled.div`
display: flex;
min-width: 48px;

View File

@ -6,7 +6,7 @@ import { Avatar, AvatarSize } from "@docspace/shared/components/avatar";
import { DropDownItem } from "@docspace/shared/components/drop-down-item";
import { Link } from "@docspace/shared/components/link";
import ProfileMenu from "./profile-menu";
import api from "@docspace/common/api";
import api from "@docspace/shared/api";
import DefaultUserPhoto from "PUBLIC_DIR/images/default_user_photo_size_82-82.png";
import { ToggleButton } from "@docspace/shared/components/toggle-button";
import { Button } from "@docspace/shared/components/button";

View File

@ -2,7 +2,7 @@
import CatalogFolderReactSvgUrl from "PUBLIC_DIR/images/catalog.folder.react.svg?url";
import React from "react";
import { withTranslation } from "react-i18next";
import Filter from "@docspace/common/api/people/filter";
import Filter from "@docspace/shared/api/people/filter";
import Loaders from "@docspace/common/components/Loaders";
import { inject, observer } from "mobx-react";
import { getSelectedGroup } from "../../../helpers/people-helpers";
@ -10,7 +10,7 @@ import { useNavigate } from "react-router-dom";
import { isMobile } from "@docspace/shared/utils";
import { isMobileOnly } from "react-device-detect";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { ArticleItem } from "@docspace/shared/components/article-item";
import withLoader from "../../../HOCs/withLoader";

View File

@ -14,7 +14,7 @@ import { toastr } from "@docspace/shared/components/toast";
import Loaders from "@docspace/common/components/Loaders";
import { inject, observer } from "mobx-react";
import config from "PACKAGE_FILE";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { isMobile } from "react-device-detect";
import {
isMobile as isMobileUtils,

View File

@ -1,40 +0,0 @@
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "@docspace/common/utils/i18next-http-backend";
import { LANGUAGE } from "@docspace/shared/constants";
import config from "PACKAGE_FILE";
import { getCookie } from "@docspace/shared/utils";
import { loadLanguagePath } from "SRC_DIR/helpers/utils";
const newInstance = i18n.createInstance();
newInstance
.use(Backend)
.use(initReactI18next)
.init({
lng: getCookie(LANGUAGE) || "en",
fallbackLng: "en",
load: "currentOnly",
//debug: true,
interpolation: {
escapeValue: false, // not needed for react as it escapes by default
format: function (value, format) {
if (format === "lowercase") return value.toLowerCase();
return value;
},
},
backend: {
loadPath: loadLanguagePath(config.homepage),
},
ns: ["PeopleSelector", "Common", "PeopleTranslations"],
defaultNS: "PeopleSelector",
react: {
useSuspense: false,
},
});
export default newInstance;

View File

@ -1,286 +0,0 @@
import i18n from "./i18n";
import PropTypes from "prop-types";
import { inject, observer } from "mobx-react";
import React, { useState, useEffect } from "react";
import { I18nextProvider, withTranslation } from "react-i18next";
import { Selector } from "@docspace/shared/components/selector";
import { getUserRole } from "@docspace/common/utils";
import Filter from "@docspace/common/api/people/filter";
import { getUserList } from "@docspace/common/api/people";
import Loaders from "@docspace/common/components/Loaders";
import { EmployeeStatus } from "@docspace/common/constants";
import { LOADER_TIMEOUT } from "@docspace/common/constants";
import useLoadingWithTimeout from "SRC_DIR/Hooks/useLoadingWithTimeout";
import DefaultUserPhoto from "PUBLIC_DIR/images/default_user_photo_size_82-82.png";
import EmptyScreenPersonsSvgUrl from "PUBLIC_DIR/images/empty_screen_persons.svg?url";
import CatalogAccountsReactSvgUrl from "PUBLIC_DIR/images/catalog.accounts.react.svg?url";
import EmptyScreenPersonsSvgDarkUrl from "PUBLIC_DIR/images/empty_screen_persons_dark.svg?url";
const PeopleSelector = ({
acceptButtonLabel,
accessRights,
cancelButtonLabel,
className,
emptyScreenDescription,
emptyScreenHeader,
headerLabel,
id,
isMultiSelect,
items,
onAccept,
onAccessRightsChange,
onBackClick,
onCancel,
onSelect,
onSelectAll,
searchEmptyScreenDescription,
searchEmptyScreenHeader,
searchPlaceholder,
selectAllIcon,
selectAllLabel,
selectedAccessRight,
selectedItems,
style,
t,
withAccessRights,
withCancelButton,
withSelectAll,
filter,
excludeItems,
currentUserId,
theme,
withOutCurrentAuthorizedUser,
withAbilityCreateRoomUsers,
withFooterCheckbox,
footerCheckboxLabel,
isChecked,
setIsChecked,
filterUserId,
}) => {
const [itemsList, setItemsList] = useState(items);
const [searchValue, setSearchValue] = useState("");
const [total, setTotal] = useState(0);
const [hasNextPage, setHasNextPage] = useState(true);
const [isNextPageLoading, setIsNextPageLoading] = useState(false);
const [isLoading, setIsLoading] = useLoadingWithTimeout(
LOADER_TIMEOUT,
false
);
useEffect(() => {
loadNextPage(0);
}, []);
const toListItem = (item) => {
const {
id,
email,
avatar,
icon,
displayName,
hasAvatar,
isOwner,
isAdmin,
isVisitor,
isCollaborator,
} = item;
const role = getUserRole(item);
const userAvatar = hasAvatar ? avatar : DefaultUserPhoto;
return {
id,
email,
avatar: userAvatar,
icon,
label: displayName || email,
role,
isOwner,
isAdmin,
isVisitor,
isCollaborator,
hasAvatar,
};
};
const moveCurrentUserToTopOfList = (listUser) => {
const currentUserIndex = listUser.findIndex(
(user) => user.id === currentUserId
);
// return if the current user is already at the top of the list or not found
if (currentUserIndex < 1) return listUser;
const [currentUser] = listUser.splice(currentUserIndex, 1);
listUser.splice(0, 0, currentUser);
return listUser;
};
const removeCurrentUserFromList = (listUser) => {
if (filterUserId) {
return listUser.filter((user) => user.id !== filterUserId);
}
return listUser.filter((user) => user.id !== currentUserId);
};
const loadNextPage = (startIndex, search = searchValue) => {
const pageCount = 100;
setIsNextPageLoading(true);
if (startIndex === 0) {
setIsLoading(true);
}
const currentFilter =
typeof filter === "function" ? filter() : filter ?? Filter.getDefault();
currentFilter.page = startIndex / pageCount;
currentFilter.pageCount = pageCount;
if (!!search.length) {
currentFilter.search = search;
}
getUserList(currentFilter)
.then((response) => {
let newItems = startIndex ? itemsList : [];
let totalDifferent = startIndex ? response.total - total : 0;
const items = response.items
.filter((item) => {
const excludeUser =
withAbilityCreateRoomUsers &&
((!item.isAdmin && !item.isOwner && !item.isRoomAdmin) ||
item.status === EmployeeStatus.Disabled);
if (excludeItems.includes(item.id) || excludeUser) {
totalDifferent++;
return false;
} else {
return true;
}
})
.map((item) => toListItem(item));
const tempItems = [...newItems, ...items];
newItems = withOutCurrentAuthorizedUser
? removeCurrentUserFromList(tempItems)
: moveCurrentUserToTopOfList(tempItems);
const newTotal = withOutCurrentAuthorizedUser
? response.total - totalDifferent - 1
: response.total - totalDifferent;
setHasNextPage(newItems.length < newTotal);
setItemsList(newItems);
setTotal(newTotal);
setIsNextPageLoading(false);
setIsLoading(false);
})
.catch((error) => console.log(error));
};
const onSearch = (value) => {
setSearchValue(value);
loadNextPage(0, value);
};
const onClearSearch = () => {
setSearchValue("");
loadNextPage(0, "");
};
const emptyScreenImage = theme.isBase
? EmptyScreenPersonsSvgUrl
: EmptyScreenPersonsSvgDarkUrl;
return (
<Selector
id={id}
className={className}
style={style}
headerLabel={headerLabel || t("ListAccounts")}
onBackClick={onBackClick}
searchPlaceholder={searchPlaceholder || t("Common:Search")}
searchValue={searchValue}
onSearch={onSearch}
onClearSearch={onClearSearch}
items={itemsList}
isMultiSelect={isMultiSelect}
selectedItems={selectedItems}
acceptButtonLabel={acceptButtonLabel || t("Common:SelectAction")}
onAccept={onAccept}
withSelectAll={withSelectAll}
selectAllLabel={selectAllLabel || t("AllAccounts")}
selectAllIcon={selectAllIcon}
withAccessRights={withAccessRights}
accessRights={accessRights}
selectedAccessRight={selectedAccessRight}
withCancelButton={withCancelButton}
cancelButtonLabel={cancelButtonLabel || t("Common:CancelButton")}
onCancel={onCancel}
emptyScreenImage={emptyScreenImage}
emptyScreenHeader={emptyScreenHeader || t("EmptyHeader")}
emptyScreenDescription={emptyScreenDescription || t("EmptyDescription")}
searchEmptyScreenImage={emptyScreenImage}
searchEmptyScreenHeader={
searchEmptyScreenHeader || t("People:NotFoundUsers")
}
searchEmptyScreenDescription={
searchEmptyScreenDescription || t("People:NotFoundUsersDescription")
}
hasNextPage={hasNextPage}
isNextPageLoading={isNextPageLoading}
loadNextPage={loadNextPage}
totalItems={total}
isLoading={isLoading}
withFooterCheckbox={withFooterCheckbox}
footerCheckboxLabel={footerCheckboxLabel}
isChecked={isChecked}
setIsChecked={setIsChecked}
searchLoader={<Loaders.SelectorSearchLoader />}
isSearchLoading={isLoading}
rowLoader={<Loaders.SelectorRowLoader isUser isContainer={isLoading} />}
/>
);
};
PeopleSelector.propTypes = { excludeItems: PropTypes.array };
PeopleSelector.defaultProps = {
excludeItems: [],
selectAllIcon: CatalogAccountsReactSvgUrl,
};
const ExtendedPeopleSelector = inject(({ auth }) => {
return {
theme: auth.settingsStore.theme,
currentUserId: auth.userStore.user.id,
};
})(
observer(
withTranslation([
"PeopleSelector",
"PeopleTranslations",
"People",
"Common",
])(PeopleSelector)
)
);
export default (props) => (
<I18nextProvider i18n={i18n}>
<ExtendedPeopleSelector {...props} />
</I18nextProvider>
);

View File

@ -1,62 +0,0 @@
import React from "react";
import PropTypes from "prop-types";
import { Avatar } from "@docspace/shared/components/avatar";
import { Text } from "@docspace/shared/components/text";
import StyledUserTooltip from "./StyledUserTooltip";
const UserTooltip = ({ avatarUrl, label, email, position, theme }) => (
<StyledUserTooltip theme={theme}>
<div className="block-avatar">
<Avatar
theme={theme}
className="user-avatar"
size="min"
role="user"
source={avatarUrl}
userName=""
editing={false}
/>
</div>
<div className="block-info">
<Text
theme={theme}
isBold={true}
fontSize="13px"
fontWeight={600}
truncate={true}
title={label}
>
{label}
</Text>
<Text
theme={theme}
color={theme.peopleSelector.textColor}
fontSize="13px"
className="email-text"
truncate={true}
title={email}
>
{email}
</Text>
<Text
theme={theme}
fontSize="13px"
fontWeight={600}
truncate={true}
title={position}
>
{position}
</Text>
</div>
</StyledUserTooltip>
);
UserTooltip.propTypes = {
avatarUrl: PropTypes.string,
label: PropTypes.string,
email: PropTypes.string,
position: PropTypes.string,
};
export default UserTooltip;

View File

@ -4,15 +4,16 @@ import LinkReactSvgUrl from "PUBLIC_DIR/images/link.react.svg?url";
import LockedReactSvgUrl from "PUBLIC_DIR/images/locked.react.svg?url";
import FileActionsFavoriteReactSvgUrl from "PUBLIC_DIR/images/file.actions.favorite.react.svg?url";
import FavoriteReactSvgUrl from "PUBLIC_DIR/images/favorite.react.svg?url";
import React from "react";
import styled from "styled-components";
import { isTablet, commonIconsStyles } from "@docspace/shared/utils";
import { isTablet, isMobile, commonIconsStyles } from "@docspace/shared/utils";
import {
FileStatus,
RoomsType,
ShareAccessRights,
} from "@docspace/common/constants";
} from "@docspace/shared/enums";
import { ColorTheme, ThemeId } from "@docspace/shared/components/color-theme";
@ -30,10 +31,12 @@ const QuickButtons = (props) => {
viewAs,
folderCategory,
isPublicRoom,
onClickShare,
isPersonalRoom,
isArchiveFolder,
} = props;
const { id, locked, fileStatus, title, fileExst } = item;
const { id, locked, shared, fileStatus, title, fileExst } = item;
const isFavorite =
(fileStatus & FileStatus.IsFavorite) === FileStatus.IsFavorite;
@ -54,6 +57,10 @@ const QuickButtons = (props) => {
? theme.filesQuickButtons.sharedColor
: theme.filesQuickButtons.color;
const colorShare = shared
? theme.filesQuickButtons.sharedColor
: theme.filesQuickButtons.color;
const tabletViewQuickButton = isTablet();
const sizeQuickButton = isTile || tabletViewQuickButton ? "medium" : "small";
@ -67,6 +74,8 @@ const QuickButtons = (props) => {
const isAvailableDownloadFile =
isPublicRoom && item.security.Download && viewAs === "tile";
const isAvailableShareFile = isPersonalRoom && item.canShare;
const isPublicRoomType =
item.roomType === RoomsType.PublicRoom ||
item.roomType === RoomsType.CustomRoom;
@ -82,6 +91,11 @@ const QuickButtons = (props) => {
!isArchiveFolder &&
!isTile;
const onShare = () => {
if (isMobile()) return;
onClickShare();
};
return (
<div className="badges additional-badges badges__quickButtons">
{isAvailableLockFile && (
@ -125,6 +139,19 @@ const QuickButtons = (props) => {
title={t("Files:CopyGeneralLink")}
/>
)}
{isAvailableShareFile && (
<ColorTheme
themeId={ThemeId.IconButton}
iconName={LinkReactSvgUrl}
className="badge copy-link icons-group"
size={sizeQuickButton}
onClick={onShare}
color={colorShare}
isDisabled={isDisabled}
hoverColor={theme.filesQuickButtons.sharedColor}
title={t("Files:CopyGeneralLink")}
/>
)}
{/* {fileExst && !isTrashFolder && displayBadges && (
<ColorTheme
themeId={ThemeId.IconButton}

View File

@ -0,0 +1,54 @@
import { inject, observer } from "mobx-react";
import Section, { SectionProps } from "@docspace/shared/components/section";
const SectionWrapper = ({
children,
...rest
}: SectionProps) => {
return <Section {...rest}>{children}</Section>;
};
export default inject(
({ auth, dialogsStore }: { auth: any; dialogsStore: any }) => {
const { settingsStore } = auth;
const {
isDesktopClient: isDesktop,
currentDeviceType,
isHeaderVisible,
isTabletView,
maintenanceExist,
snackbarExist,
showText,
} = settingsStore;
const { isVisible, isMobileHidden, setIsVisible, getCanDisplay } =
auth.infoPanelStore;
const { createRoomDialogVisible, invitePanelOptions } = dialogsStore;
const canDisplay = getCanDisplay();
const anotherDialogOpen =
createRoomDialogVisible || invitePanelOptions.visible;
const { isScrollLocked: isInfoPanelScrollLocked } = auth.infoPanelStore;
return {
isDesktop,
currentDeviceType,
isInfoPanelVisible: isVisible,
isMobileHidden,
setIsInfoPanelVisible: setIsVisible,
canDisplay,
anotherDialogOpen,
isHeaderVisible,
isTabletView,
maintenanceExist,
snackbarExist,
showText,
isInfoPanelScrollLocked,
};
}
)(observer(SectionWrapper));

View File

@ -12,8 +12,8 @@ import {
AvatarPreview,
} from "@docspace/shared/components/image-editor";
import { loadAvatar, deleteAvatar } from "@docspace/common/api/people";
import { dataUrlToFile } from "@docspace/common/utils/dataUrlToFile";
import { loadAvatar, deleteAvatar } from "@docspace/shared/api/people";
import { dataUrlToFile } from "@docspace/shared/utils/dataUrlToFile";
import DefaultUserAvatarMax from "PUBLIC_DIR/images/default_user_photo_size_200-200.png";

View File

@ -10,7 +10,7 @@ import { toastr } from "@docspace/shared/components/toast";
import { withTranslation } from "react-i18next";
import ModalDialogContainer from "../ModalDialogContainer";
import { DeviceType } from "@docspace/common/constants";
import { DeviceType } from "@docspace/shared/enums";
import { isDesktop } from "@docspace/shared/utils";
const StyledModal = styled(ModalDialogContainer)`

View File

@ -9,9 +9,9 @@ import { toastr } from "@docspace/shared/components/toast";
import { withTranslation } from "react-i18next";
import ModalDialogContainer from "../ModalDialogContainer";
import { sendInstructionsToChangeEmail } from "@docspace/common/api/people";
import { sendInstructionsToChangeEmail } from "@docspace/shared/api/people";
import { errorKeys } from "@docspace/shared/constants";
import { ErrorKeys } from "@docspace/shared/enums";
import { inject, observer } from "mobx-react";
class ChangeEmailDialogComponent extends React.Component {
constructor(props) {
@ -99,27 +99,27 @@ class ChangeEmailDialogComponent extends React.Component {
} else {
const translatedErrors = emailErrors.map((errorKey) => {
switch (errorKey) {
case errorKeys.LocalDomain:
case ErrorKeys.LocalDomain:
return t("Common:LocalDomain");
case errorKeys.IncorrectDomain:
case ErrorKeys.IncorrectDomain:
return t("Common:IncorrectDomain");
case errorKeys.DomainIpAddress:
case ErrorKeys.DomainIpAddress:
return t("Common:DomainIpAddress");
case errorKeys.PunycodeDomain:
case ErrorKeys.PunycodeDomain:
return t("Common:PunycodeDomain");
case errorKeys.PunycodeLocalPart:
case ErrorKeys.PunycodeLocalPart:
return t("Common:PunycodeLocalPart");
case errorKeys.IncorrectLocalPart:
case ErrorKeys.IncorrectLocalPart:
return t("Common:IncorrectLocalPart");
case errorKeys.SpacesInLocalPart:
case ErrorKeys.SpacesInLocalPart:
return t("Common:SpacesInLocalPart");
case errorKeys.MaxLengthExceeded:
case ErrorKeys.MaxLengthExceeded:
return t("Common:MaxLengthExceeded");
case errorKeys.IncorrectEmail:
case ErrorKeys.IncorrectEmail:
return t("Common:IncorrectEmail");
case errorKeys.ManyEmails:
case ErrorKeys.ManyEmails:
return t("Common:ManyEmails");
case errorKeys.EmptyEmail:
case ErrorKeys.EmptyEmail:
return t("Common:EmptyEmail");
default:
throw new Error("Unknown translation key");

View File

@ -8,7 +8,7 @@ import { Link } from "@docspace/shared/components/link";
import { Text } from "@docspace/shared/components/text";
import { withTranslation, Trans } from "react-i18next";
import { sendInstructionsToChangePassword } from "@docspace/common/api/people";
import { sendInstructionsToChangePassword } from "@docspace/shared/api/people";
class ChangePasswordDialogComponent extends React.Component {
constructor() {

View File

@ -4,9 +4,9 @@ import { inject, observer } from "mobx-react";
import { ReactSVG } from "react-svg";
import { withTranslation } from "react-i18next";
import PeopleSelector from "SRC_DIR/components/PeopleSelector";
import PeopleSelector from "@docspace/shared/selectors/People";
import Filter from "@docspace/common/api/people/filter";
import Filter from "@docspace/shared/api/people/filter";
import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { Avatar } from "@docspace/shared/components/avatar";
@ -118,6 +118,7 @@ const ChangePortalOwnerDialog = ({
onAccept={onAccept}
onCancel={onBackClick}
onBackClick={onBackClick}
currentUserId={id}
/>
</ModalDialog.Container>
)}

View File

@ -8,7 +8,7 @@ import { Text } from "@docspace/shared/components/text";
import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { inject, observer } from "mobx-react";
import { getConvertedSize } from "@docspace/common/utils";
import { getConvertedSize } from "@docspace/shared/utils/common";
const ModalDialogContainer = styled(ModalDialog)`
.cannot-downgrade-plan {

View File

@ -7,11 +7,11 @@ import { Text } from "@docspace/shared/components/text";
import { Link } from "@docspace/shared/components/link";
import { toastr } from "@docspace/shared/components/toast";
import { combineUrl } from "@docspace/common/utils";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
import { withTranslation } from "react-i18next";
import { EmployeeStatus } from "@docspace/common/constants";
import { EmployeeStatus } from "@docspace/shared/enums";
import ModalDialogContainer from "../ModalDialogContainer";
import { inject, observer } from "mobx-react";

View File

@ -8,7 +8,7 @@ import { toastr } from "@docspace/shared/components/toast";
import { withTranslation, Trans } from "react-i18next";
import { inject, observer } from "mobx-react";
import { ConflictResolveType } from "@docspace/common/constants";
import { ConflictResolveType } from "@docspace/shared/enums";
import styled from "styled-components";

View File

@ -9,8 +9,8 @@ import { FieldContainer } from "@docspace/shared/components/field-container";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { getOAuthToken } from "@docspace/common/utils";
import { saveSettingsThirdParty } from "@docspace/common/api/files";
import { getOAuthToken } from "@docspace/shared/utils/common";
import { saveSettingsThirdParty } from "@docspace/shared/api/files";
const PureConnectDialogContainer = (props) => {
const {

View File

@ -9,7 +9,7 @@ import { Checkbox } from "@docspace/shared/components/checkbox";
import { withTranslation, Trans } from "react-i18next";
import { inject, observer } from "mobx-react";
import Loaders from "@docspace/common/components/Loaders";
import { FolderType } from "@docspace/common/constants";
import { FolderType } from "@docspace/shared/enums";
const ConvertDialogComponent = (props) => {
const {

View File

@ -11,7 +11,7 @@ import SimulatePassword from "../../SimulatePassword";
import StyledComponent from "./StyledConvertPasswordDialog";
import config from "PACKAGE_FILE";
import { openDocEditor } from "@docspace/client/src/helpers/filesUtils";
import combineUrl from "@docspace/common/utils/combineUrl";
import { combineUrl } from "@docspace/shared/utils/combineUrl";
let tab, _isMounted;
const ConvertPasswordDialogComponent = (props) => {

View File

@ -1,4 +1,4 @@
import { RoomsType } from "@docspace/common/constants";
import { RoomsType } from "@docspace/shared/enums";
export const getRoomTypeTitleTranslation = (roomType = 1, t) => {
switch (roomType) {
@ -14,6 +14,8 @@ export const getRoomTypeTitleTranslation = (roomType = 1, t) => {
return t("CreateEditRoomDialog:CustomRoomTitle");
case RoomsType.PublicRoom:
return t("Files:PublicRoom");
case RoomsType.FormRoom:
return t("CreateEditRoomDialog:FormRoomTitle");
}
};
@ -31,6 +33,8 @@ export const getRoomTypeDescriptionTranslation = (roomType = 1, t) => {
return t("CreateEditRoomDialog:CustomRoomDescription");
case RoomsType.PublicRoom:
return t("CreateEditRoomDialog:PublicRoomDescription");
case RoomsType.FormRoom:
return t("CreateEditRoomDialog:FormRoomDescription");
}
};
@ -48,5 +52,7 @@ export const getRoomTypeDefaultTagTranslation = (roomType = 1, t) => {
return t("Files:CustomRooms");
case RoomsType.PublicRoom:
return t("Files:PublicRoom");
case RoomsType.FormRoom:
return t("Files:FormRoom");
}
};

View File

@ -4,7 +4,7 @@ import styled from "styled-components";
import RoomType from "../RoomType";
import { Base } from "@docspace/shared/themes";
import { RoomsType } from "@docspace/common/constants";
import { RoomsTypeValues } from "@docspace/shared/utils/common";
const StyledDropdownDesktop = styled.div`
max-width: 100%;
@ -42,7 +42,7 @@ const DropdownDesktop = ({ t, open, chooseRoomType }) => {
return (
<StyledDropdownDesktop className="dropdown-content-wrapper" isOpen={open}>
<div className="dropdown-content">
{Object.values(RoomsType).map((roomType) => (
{Object.values(RoomsTypeValues).map((roomType) => (
<RoomType
id={roomType}
t={t}

View File

@ -2,7 +2,7 @@ import React from "react";
import styled from "styled-components";
import RoomType from "../RoomType";
import { RoomsType } from "./../../../../../../../common/constants/index";
import { RoomsTypeValues } from "@docspace/shared/utils/common";
import { Backdrop } from "@docspace/shared/components/backdrop";
import { Base } from "@docspace/shared/themes";
@ -31,7 +31,7 @@ const DropdownMobile = ({ t, open, onClose, chooseRoomType }) => {
<>
<Backdrop visible={open} onClick={onClose} zIndex={450} />
<StyledDropdownMobile className="dropdown-mobile" isOpen={open}>
{Object.values(RoomsType).map((roomType) => (
{Object.values(RoomsTypeValues).map((roomType) => (
<RoomType
id={roomType}
t={t}

View File

@ -6,7 +6,7 @@ import RoomType from "./RoomType";
import withLoader from "@docspace/client/src/HOCs/withLoader";
import Loaders from "@docspace/common/components/Loaders";
import { RoomsType } from "./../../../../../../common/constants/index";
import { RoomsTypeValues } from "@docspace/shared/utils/common";
const StyledRoomTypeList = styled.div`
width: 100%;
@ -19,7 +19,7 @@ const StyledRoomTypeList = styled.div`
const RoomTypeList = ({ t, setRoomType }) => {
return (
<StyledRoomTypeList>
{Object.values(RoomsType).map((roomType) => (
{Object.values(RoomsTypeValues).map((roomType) => (
<RoomType
id={roomType}
t={t}

View File

@ -20,6 +20,9 @@ import { ImageEditor } from "@docspace/shared/components/image-editor";
import PreviewTile from "@docspace/shared/components/image-editor/PreviewTile";
import { Text } from "@docspace/shared/components/text";
import SystemFolders from "./SystemFolders";
import { RoomsType } from "@docspace/shared/enums";
import ChangeRoomOwner from "./ChangeRoomOwner";
const StyledSetRoomParams = styled.div`
@ -61,6 +64,8 @@ const SetRoomParams = ({
}) => {
const [previewIcon, setPreviewIcon] = React.useState(null);
const isFormRoom = roomParams.type === RoomsType.FormRoom;
const onChangeName = (e) => {
setIsValidTitle(true);
if (e.target.value.match(folderFormValidation)) {
@ -141,6 +146,7 @@ const SetRoomParams = ({
onChangeIsPrivate={onChangeIsPrivate}
/>
)} */}
{isFormRoom && <SystemFolders t={t} />}
{isEdit && (
<ChangeRoomOwner

View File

@ -0,0 +1,5 @@
interface SystemFoldersProps {
t: Function;
}
export default SystemFoldersProps;

View File

@ -0,0 +1,29 @@
import styled from "styled-components";
import { Text } from "@docspace/shared/components/text";
import { ToggleButton } from "@docspace/shared/components/toggle-button";
export const SystemFoldersTitle = styled(Text)`
font-weight: 600;
line-height: 20px;
`;
export const SystemFoldersDescription = styled(Text)`
font-weight: 400;
font-size: 12px;
line-height: 16px;
color: ${(props) =>
props.theme.createEditRoomDialog.roomType.dropdownItem.descriptionText};
`;
export const SystemFoldersHeader = styled.div`
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 2px;
`;
export const SystemFoldersToggleButton = styled(ToggleButton)`
width: 30px;
height: 16px;
`;

View File

@ -0,0 +1,28 @@
import React from "react";
import {
SystemFoldersTitle,
SystemFoldersHeader,
SystemFoldersDescription,
SystemFoldersToggleButton,
} from "./SystemFolders.styled";
import type SystemFoldersProps from "./SystemFolders.props";
function SystemFolders({ t }: SystemFoldersProps) {
return (
<section>
<SystemFoldersHeader>
<SystemFoldersTitle>
{t("CreateEditRoomDialog:PublicRoomSystemFoldersTitle")}
</SystemFoldersTitle>
<SystemFoldersToggleButton isChecked isDisabled onChange={() => {}} />
</SystemFoldersHeader>
<SystemFoldersDescription>
{t("CreateEditRoomDialog:PublicRoomSystemFoldersDescription")}
</SystemFoldersDescription>
</section>
);
}
export default SystemFolders;

View File

@ -0,0 +1 @@
export { default } from "./SystemFolders";

View File

@ -9,7 +9,7 @@ import ToggleParam from "../Params/ToggleParam";
import ThirdPartyComboBox from "./ThirdPartyComboBox";
import FolderInput from "./FolderInput";
import { getOAuthToken } from "@docspace/common/utils";
import { getOAuthToken } from "@docspace/shared/utils/common";
const StyledThirdPartyStorage = styled(StyledParam)`
flex-direction: column;

View File

@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
import styled from "styled-components";
import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next";
import PeopleSelector from "@docspace/client/src/components/PeopleSelector";
import PeopleSelector from "@docspace/shared/selectors/People";
import { toastr } from "@docspace/shared/components/toast";
import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { Backdrop } from "@docspace/shared/components/backdrop";
@ -10,7 +10,7 @@ import { useNavigate } from "react-router-dom";
import Body from "./sub-components/Body";
import Footer from "./sub-components/Footer";
import api from "@docspace/common/api";
import api from "@docspace/shared/api";
const { Filter } = api;
const StyledModalDialog = styled(ModalDialog)`
@ -177,23 +177,24 @@ const DataReassignmentDialog = ({
visible={visible}
onClose={onClosePeopleSelector}
containerVisible={selectorVisible}
withFooterBorder={true}
withBodyScroll={true}
withFooterBorder
withBodyScroll
>
<Backdrop
onClick={onClosePeopleSelector}
visible={selectorVisible}
isAside={true}
isAside
/>
<ModalDialog.Container>
<PeopleSelector
acceptButtonLabel={t("Common:SelectAction")}
excludeItems={[user.id]}
currentUserId={user.id}
onAccept={onAccept}
onCancel={onClosePeopleSelector}
onBackClick={onTogglePeopleSelector}
withCancelButton={true}
withAbilityCreateRoomUsers={true}
withCancelButton
withAbilityCreateRoomUsers
/>
</ModalDialog.Container>
</StyledModalDialog>
@ -206,8 +207,8 @@ const DataReassignmentDialog = ({
visible={visible}
onClose={onClose}
containerVisible={selectorVisible}
withFooterBorder={true}
withBodyScroll={true}
withFooterBorder
withBodyScroll
>
<ModalDialog.Header>
{t("DataReassignmentDialog:DataReassignment")}

View File

@ -10,7 +10,7 @@ import { StyledDeleteLinkDialog } from "./StyledDeleteLinkDialog";
import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { RoomsType } from "@docspace/common/constants";
import { RoomsType } from "@docspace/shared/enums";
const DeleteLinkDialogComponent = (props) => {
const {

View File

@ -5,7 +5,7 @@ import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { Button } from "@docspace/shared/components/button";
import { toastr } from "@docspace/shared/components/toast";
import { sendDeletePortalEmail } from "@docspace/common/api/portal";
import { sendDeletePortalEmail } from "@docspace/shared/api/portal";
import ModalDialogContainer from "../ModalDialogContainer";
import { ColorTheme, ThemeId } from "@docspace/shared/components/color-theme";

View File

@ -4,7 +4,7 @@ import { Button } from "@docspace/shared/components/button";
import { toastr } from "@docspace/shared/components/toast";
import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { withTranslation } from "react-i18next";
import api from "@docspace/common/api";
import api from "@docspace/shared/api";
import ModalDialogContainer from "../ModalDialogContainer";
import { inject, observer } from "mobx-react";

View File

@ -9,7 +9,7 @@ import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { Link } from "@docspace/shared/components/link";
import { Trans, withTranslation } from "react-i18next";
import ModalDialogContainer from "../ModalDialogContainer";
import { sendInstructionsToDelete } from "@docspace/common/api/people";
import { sendInstructionsToDelete } from "@docspace/shared/api/people";
class DeleteSelfProfileDialogComponent extends React.Component {
constructor(props) {

View File

@ -7,7 +7,7 @@ import { withTranslation } from "react-i18next";
import { inject, observer } from "mobx-react";
import { useNavigate, useLocation } from "react-router-dom";
import FilesFilter from "@docspace/common/api/files/filter";
import FilesFilter from "@docspace/shared/api/files/filter";
const DeleteThirdPartyDialog = (props) => {
const {

View File

@ -7,7 +7,7 @@ import { ModalDialog } from "@docspace/shared/components/modal-dialog";
import { Button } from "@docspace/shared/components/button";
import { Text } from "@docspace/shared/components/text";
import { getDaysRemaining } from "@docspace/common/utils";
import { getDaysRemaining } from "@docspace/shared/utils/common";
const InviteUsersWarningDialog = (props) => {
const {

View File

@ -1,6 +1,6 @@
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "@docspace/common/utils/i18next-http-backend";
import Backend from "@docspace/shared/utils/i18next-http-backend";
import { LANGUAGE } from "@docspace/shared/constants";
import config from "PACKAGE_FILE";
import { getCookie } from "@docspace/shared/utils";

Some files were not shown because too many files have changed in this diff Show More