{
node = null;
- refManager = null;
+ refManagers = {
+ synced: null,
+ notSynced: null,
+ };
constructor (props: I.PageSettingsComponent) {
super(props);
@@ -20,12 +23,14 @@ const PageMainSettingsStorageManager = observer(class PageMainSettingsStorageMan
render () {
const { spaceStorage } = S.Common;
const { localUsage, bytesLimit } = spaceStorage;
+ const { notSyncedCounter } = S.Auth.getSyncStatus();
const spaces = U.Space.getList();
const usageCn = [ 'item' ];
const canWrite = U.Space.canMyParticipantWrite();
let bytesUsed = 0;
let buttonUpgrade = null;
+ let label = U.Common.sprintf(translate(`popupSettingsSpaceIndexStorageText`), U.File.size(bytesLimit));
const progressSegments = (spaces || []).map(space => {
const object: any = S.Common.spaceStorage.spaces.find(it => it.spaceId == space.targetSpaceId) || {};
@@ -43,48 +48,71 @@ const PageMainSettingsStorageManager = observer(class PageMainSettingsStorageMan
if (isRed) {
usageCn.push('red');
- buttonUpgrade = ;
+ buttonUpgrade = ;
+ label = translate('popupSettingsSpaceIndexStorageIsFullText');
};
- const buttons: I.ButtonComponent[] = [
- { icon: 'remove', text: translate('commonDeleteImmediately'), onClick: this.onRemove }
- ];
- const filters: I.Filter[] = [
- { relationKey: 'fileSyncStatus', condition: I.FilterCondition.Equal, value: I.FileSyncStatus.Synced },
- ];
- const sorts: I.Sort[] = [
- { type: I.SortType.Desc, relationKey: 'sizeInBytes' },
- ];
+ const Manager = (item: any) => {
+ const { refId } = item;
+ const buttons: I.ButtonComponent[] = [
+ { icon: 'remove', text: translate('commonDeleteImmediately'), onClick: () => this.onRemove(refId) }
+ ];
+ const filters: I.Filter[] = [
+ { relationKey: 'fileSyncStatus', condition: I.FilterCondition.In, value: item.filters },
+ ];
+ const sorts: I.Sort[] = [
+ { type: I.SortType.Desc, relationKey: 'sizeInBytes' },
+ ];
+
+ return (
+
+
+
+ this.refManagers[refId] = ref}
+ subId={item.subId}
+ rowLength={2}
+ buttons={buttons}
+ info={I.ObjectManagerItemInfo.FileSize}
+ iconSize={18}
+ sorts={sorts}
+ keys={U.Subscription.syncStatusRelationKeys()}
+ filters={filters}
+ ignoreHidden={false}
+ ignoreArchived={false}
+ textEmpty={translate('popupSettingsSpaceStorageManagerEmptyLabel')}
+ />
+
+ );
+ };
return (
this.node = ref} className="wrap">
{buttonUpgrade}
-
+
+ {notSyncedCounter && canWrite ? (
+
+ ) : ''}
+
{canWrite ? (
-
-
-
- this.refManager = ref}
- subId={J.Constant.subId.fileManager}
- rowLength={2}
- buttons={buttons}
- info={I.ObjectManagerItemInfo.FileSize}
- iconSize={18}
- sorts={sorts}
- filters={filters}
- ignoreHidden={false}
- ignoreArchived={false}
- textEmpty={translate('popupSettingsSpaceStorageManagerEmptyLabel')}
- />
-
+
) : ''}
);
@@ -94,14 +122,20 @@ const PageMainSettingsStorageManager = observer(class PageMainSettingsStorageMan
analytics.event('ScreenSettingsSpaceStorageManager');
};
+ componentWillUnmount () {
+ U.Subscription.destroyList([ J.Constant.subId.fileManagerSynced, J.Constant.subId.fileManagerNotSynced ]);
+ };
+
onUpgrade () {
Action.membershipUpgrade();
analytics.event('ClickUpgradePlanTooltip', { type: 'storage', route: analytics.route.settingsSpaceIndex });
};
- onRemove () {
- Action.delete(this.refManager.getSelected(), analytics.route.settings, () => this.refManager?.selectionClear());
+ onRemove (refId: string) {
+ const ref = this.refManagers[refId];
+
+ Action.delete(ref.getSelected(), analytics.route.settings, () => ref?.selectionClear());
};
resize () {
diff --git a/src/ts/component/sidebar/page/settings/index.tsx b/src/ts/component/sidebar/page/settings/index.tsx
index 9b2bfd4622..d4653c3c74 100644
--- a/src/ts/component/sidebar/page/settings/index.tsx
+++ b/src/ts/component/sidebar/page/settings/index.tsx
@@ -99,6 +99,10 @@ const SidebarSettingsIndex = observer(class SidebarSettingsIndex extends React.C
};
};
+ if (item.alert) {
+ caption = {item.alert}
;
+ };
+
return (
1 ? translate('commonMembers') : translate('pageSettingsSpaceIndexInviteMembers') },
- { id: 'spaceStorageManager', icon: 'storage', name: translate('pageSettingsSpaceRemoteStorage') },
+ { id: 'spaceStorageManager', icon: 'storage', name: translate('pageSettingsSpaceRemoteStorage'), alert: notSyncedCounter },
{ id: 'archive', icon: 'bin', name: translate('commonBin') },
].filter(it => it),
},
diff --git a/src/ts/component/util/sync.tsx b/src/ts/component/util/sync.tsx
index c6500b8d99..ab12d89c63 100644
--- a/src/ts/component/util/sync.tsx
+++ b/src/ts/component/util/sync.tsx
@@ -52,4 +52,4 @@ const Sync = observer(forwardRef(({
}));
-export default Sync;
\ No newline at end of file
+export default Sync;
diff --git a/src/ts/interface/syncStatus.ts b/src/ts/interface/syncStatus.ts
index fe743cd995..049366122f 100644
--- a/src/ts/interface/syncStatus.ts
+++ b/src/ts/interface/syncStatus.ts
@@ -35,6 +35,7 @@ export interface SyncStatus {
p2p: P2PStatus;
syncingCounter: number;
devicesCounter: number;
+ notSyncedCounter: number;
};
export enum P2PStatus {
diff --git a/src/ts/lib/api/mapper.ts b/src/ts/lib/api/mapper.ts
index a4fd2895a1..2ac43d13d3 100644
--- a/src/ts/lib/api/mapper.ts
+++ b/src/ts/lib/api/mapper.ts
@@ -1686,7 +1686,8 @@ export const Mapper = {
error: obj.getError(),
network: obj.getNetwork(),
status: obj.getStatus(),
- syncingCounter: obj.getSyncingobjectscounter()
+ syncingCounter: obj.getSyncingobjectscounter(),
+ notSyncedCounter: obj.getNotsyncedfilescounter()
};
},
diff --git a/src/ts/store/auth.ts b/src/ts/store/auth.ts
index aaacc71e07..ea7359f85c 100644
--- a/src/ts/store/auth.ts
+++ b/src/ts/store/auth.ts
@@ -124,6 +124,7 @@ class AuthStore {
p2p: observable,
syncingCounter: observable,
devicesCounter: observable,
+ notSyncedCounter: observable,
});
intercept(obj as any, change => U.Common.intercept(obj, change));
@@ -220,6 +221,7 @@ class AuthStore {
p2p: I.P2PStatus.NotConnected,
syncingCounter: 0,
devicesCounter: 0,
+ notSyncedCounter: 0,
};
};