✨Toggle display of the user email in the header (#336)
This commit is contained in:
@@ -136,6 +136,7 @@
|
|||||||
"featureSharedDrive": "ENABLE_FEATURE_SHARED_DRIVE",
|
"featureSharedDrive": "ENABLE_FEATURE_SHARED_DRIVE",
|
||||||
"rootAdmins": "DRIVE_ROOT_ADMINS",
|
"rootAdmins": "DRIVE_ROOT_ADMINS",
|
||||||
"defaultLanguage": "DRIVE_DEFAULT_LANGUAGE",
|
"defaultLanguage": "DRIVE_DEFAULT_LANGUAGE",
|
||||||
"featureSearchUsers": "ENABLE_FEATURE_SEARCH_USERS"
|
"featureSearchUsers": "ENABLE_FEATURE_SEARCH_USERS",
|
||||||
|
"featureDisplayEmail": "ENABLE_FEATURE_DISPLAY_EMAIL"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,8 @@
|
|||||||
},
|
},
|
||||||
"drive": {
|
"drive": {
|
||||||
"featureSharedDrive": true,
|
"featureSharedDrive": true,
|
||||||
"featureSearchUsers": true
|
"featureSearchUsers": true,
|
||||||
|
"featureDisplayEmail": true
|
||||||
},
|
},
|
||||||
"applications": {
|
"applications": {
|
||||||
"grid": [
|
"grid": [
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ export function formatCompany(
|
|||||||
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]: JSON.parse(
|
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]: JSON.parse(
|
||||||
config.get("drive.featureSharedDrive") || "true",
|
config.get("drive.featureSharedDrive") || "true",
|
||||||
),
|
),
|
||||||
|
[CompanyFeaturesEnum.COMPANY_DISPLAY_EMAIL]: JSON.parse(
|
||||||
|
config.get("drive.featureDisplayEmail") || "true",
|
||||||
|
),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
...(res.plan?.features || {}),
|
...(res.plan?.features || {}),
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ export const companyObjectSchema = {
|
|||||||
[CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: { type: "boolean" },
|
[CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: { type: "boolean" },
|
||||||
[CompanyFeaturesEnum.COMPANY_SEARCH_USERS]: { type: "boolean" },
|
[CompanyFeaturesEnum.COMPANY_SEARCH_USERS]: { type: "boolean" },
|
||||||
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]: { type: "boolean" },
|
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]: { type: "boolean" },
|
||||||
|
[CompanyFeaturesEnum.COMPANY_DISPLAY_EMAIL]: { type: "boolean" },
|
||||||
guests: { type: "number" }, // to rename or delete
|
guests: { type: "number" }, // to rename or delete
|
||||||
members: { type: "number" }, // to rename or delete
|
members: { type: "number" }, // to rename or delete
|
||||||
storage: { type: "number" }, // to rename or delete
|
storage: { type: "number" }, // to rename or delete
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ export enum CompanyFeaturesEnum {
|
|||||||
COMPANY_INVITE_MEMBER = "company:invite_member",
|
COMPANY_INVITE_MEMBER = "company:invite_member",
|
||||||
COMPANY_SEARCH_USERS = "company:search_users",
|
COMPANY_SEARCH_USERS = "company:search_users",
|
||||||
COMPANY_SHARED_DRIVE = "company:shared_drive",
|
COMPANY_SHARED_DRIVE = "company:shared_drive",
|
||||||
|
COMPANY_DISPLAY_EMAIL = "company:display_email",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CompanyFeaturesObject = {
|
export type CompanyFeaturesObject = {
|
||||||
@@ -96,6 +97,7 @@ export type CompanyFeaturesObject = {
|
|||||||
[CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]?: boolean;
|
[CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]?: boolean;
|
||||||
[CompanyFeaturesEnum.COMPANY_SEARCH_USERS]?: boolean;
|
[CompanyFeaturesEnum.COMPANY_SEARCH_USERS]?: boolean;
|
||||||
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]?: boolean;
|
[CompanyFeaturesEnum.COMPANY_SHARED_DRIVE]?: boolean;
|
||||||
|
[CompanyFeaturesEnum.COMPANY_DISPLAY_EMAIL]?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CompanyLimitsObject = {
|
export type CompanyLimitsObject = {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export enum FeatureNames {
|
|||||||
COMPANY_INVITE_MEMBER = 'company:invite_member',
|
COMPANY_INVITE_MEMBER = 'company:invite_member',
|
||||||
COMPANY_SEARCH_USERS = 'company:search_users',
|
COMPANY_SEARCH_USERS = 'company:search_users',
|
||||||
COMPANY_SHARED_DRIVE = 'company:shared_drive',
|
COMPANY_SHARED_DRIVE = 'company:shared_drive',
|
||||||
|
COMPANY_DISPLAY_EMAIL = 'company:display_email',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FeatureValueType = boolean | number;
|
export type FeatureValueType = boolean | number;
|
||||||
@@ -27,6 +28,7 @@ availableFeaturesWithDefaults.set(FeatureNames.COMPANY_INVITE_MEMBER, true);
|
|||||||
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_INVITE_MEMBER, true);
|
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_INVITE_MEMBER, true);
|
||||||
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_SEARCH_USERS, true);
|
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_SEARCH_USERS, true);
|
||||||
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_SHARED_DRIVE, true);
|
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_SHARED_DRIVE, true);
|
||||||
|
availableFeaturesWithDefaults.set(FeatureNames.COMPANY_DISPLAY_EMAIL, true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ChannelServiceImpl that allow you to manage feature flipping in Tdrive using react feature toggles
|
* ChannelServiceImpl that allow you to manage feature flipping in Tdrive using react feature toggles
|
||||||
@@ -47,6 +49,8 @@ class FeatureTogglesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public setFeaturesFromCompanyPlan(plan: { features: { [key: string]: FeatureValueType } }): void {
|
public setFeaturesFromCompanyPlan(plan: { features: { [key: string]: FeatureValueType } }): void {
|
||||||
|
console.debug("Setting company features");
|
||||||
|
console.debug(plan);
|
||||||
for (const [featureName, defaultValue] of availableFeaturesWithDefaults) {
|
for (const [featureName, defaultValue] of availableFeaturesWithDefaults) {
|
||||||
this.setActiveFeatureName(
|
this.setActiveFeatureName(
|
||||||
featureName,
|
featureName,
|
||||||
@@ -59,14 +63,17 @@ class FeatureTogglesService {
|
|||||||
if (typeof value === 'boolean') {
|
if (typeof value === 'boolean') {
|
||||||
this.activeFeatureNames = this.activeFeatureNames.filter(name => name !== featureName);
|
this.activeFeatureNames = this.activeFeatureNames.filter(name => name !== featureName);
|
||||||
if (value) this.activeFeatureNames.push(featureName);
|
if (value) this.activeFeatureNames.push(featureName);
|
||||||
this.activeFeatureValues.set(featureName, !!value);
|
this.activeFeatureValues.set(featureName, value);
|
||||||
} else {
|
} else {
|
||||||
this.activeFeatureValues.set(featureName, value);
|
this.activeFeatureValues.set(featureName, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public isActiveFeatureName(featureName: FeatureNames) {
|
public isActiveFeatureName(featureName: FeatureNames) {
|
||||||
return this.activeFeatureNames.includes(featureName);
|
console.debug(this.activeFeatureNames)
|
||||||
|
const b = this.activeFeatureNames.includes(featureName);
|
||||||
|
console.debug(`Feature ${featureName} is ${b}`);
|
||||||
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getFeatureValue<T>(featureName: FeatureNames): T {
|
public getFeatureValue<T>(featureName: FeatureNames): T {
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ import currentUserService from '@features/users/services/current-user-service';
|
|||||||
import AccountParameter from '@views/client/popup/UserParameter/UserParameter';
|
import AccountParameter from '@views/client/popup/UserParameter/UserParameter';
|
||||||
import Languages from '../../../features/global/services/languages-service';
|
import Languages from '../../../features/global/services/languages-service';
|
||||||
import ModalManagerDepreciated from '@deprecated/popupManager/popupManager';
|
import ModalManagerDepreciated from '@deprecated/popupManager/popupManager';
|
||||||
import InitService from '@features/global/services/init-service';
|
import FeatureTogglesService, {
|
||||||
|
FeatureNames,
|
||||||
|
} from '@features/global/services/feature-toggles-service';
|
||||||
|
|
||||||
export default ({ sidebar }: { sidebar?: boolean }): JSX.Element => {
|
export default ({ sidebar }: { sidebar?: boolean }): JSX.Element => {
|
||||||
const { user } = useCurrentUser();
|
const { user } = useCurrentUser();
|
||||||
@@ -51,9 +53,12 @@ export default ({ sidebar }: { sidebar?: boolean }): JSX.Element => {
|
|||||||
<Base className="font-bold overflow-hidden text-ellipsis whitespace-nowrap w-full block -mb-1">
|
<Base className="font-bold overflow-hidden text-ellipsis whitespace-nowrap w-full block -mb-1">
|
||||||
{currentUserService.getFullName(user)}
|
{currentUserService.getFullName(user)}
|
||||||
</Base>
|
</Base>
|
||||||
<Info className="font-semibold overflow-hidden text-ellipsis whitespace-nowrap w-full">
|
|
||||||
{user.email}
|
{ !FeatureTogglesService.isActiveFeatureName(FeatureNames.COMPANY_DISPLAY_EMAIL) && (
|
||||||
</Info>
|
<Info className="font-semibold overflow-hidden text-ellipsis whitespace-nowrap w-full">
|
||||||
|
{user.email}
|
||||||
|
</Info>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user