chore: fix feature roles

This commit is contained in:
Aman Harwara
2023-05-22 21:09:44 +05:30
parent 56b4c1aa80
commit 11b4377b76
4 changed files with 16 additions and 5 deletions

View File

@@ -13,7 +13,7 @@ type RoleFields = {
/** Statically populated. Non-influencing; used as a reference by other static consumers (such as email service) */ /** Statically populated. Non-influencing; used as a reference by other static consumers (such as email service) */
availableInSubscriptions: SubscriptionName[] availableInSubscriptions: SubscriptionName[]
availableInRoles?: string[] availableInRoles: string[]
} }
export type BaseFeatureDescription = RoleFields & { export type BaseFeatureDescription = RoleFields & {

View File

@@ -2,11 +2,11 @@ import { SubscriptionName } from '@standardnotes/common'
import { GetFeatures, GetFeaturesForSubscription } from './Features' import { GetFeatures, GetFeaturesForSubscription } from './Features'
describe('features', () => { describe('features', () => {
it('all features should have either availableInSubscriptions or availableInRoles populated', () => { it('all features should have availableInRoles populated', () => {
const features = GetFeatures() const features = GetFeatures()
for (const feature of features) { for (const feature of features) {
expect(feature.availableInSubscriptions.length > 0 || feature.availableInRoles !== undefined && feature.availableInRoles.length > 0).toBeTruthy() expect(feature.availableInRoles !== undefined && feature.availableInRoles.length > 0).toBeTruthy()
} }
}) })
it('gets features for plus plan', () => { it('gets features for plus plan', () => {

View File

@@ -2,6 +2,7 @@ import { ServerFeatureDescription } from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName' import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier' import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { SubscriptionName } from '@standardnotes/common' import { SubscriptionName } from '@standardnotes/common'
import { RoleName } from '@standardnotes/domain-core'
export function serverFeatures(): ServerFeatureDescription[] { export function serverFeatures(): ServerFeatureDescription[] {
return [ return [
@@ -10,57 +11,67 @@ export function serverFeatures(): ServerFeatureDescription[] {
name: 'Two factor authentication', name: 'Two factor authentication',
identifier: FeatureIdentifier.TwoFactorAuth, identifier: FeatureIdentifier.TwoFactorAuth,
permission_name: PermissionName.TwoFactorAuth, permission_name: PermissionName.TwoFactorAuth,
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.ProPlan],
name: 'U2F authentication', name: 'U2F authentication',
identifier: FeatureIdentifier.UniversalSecondFactor, identifier: FeatureIdentifier.UniversalSecondFactor,
permission_name: PermissionName.UniversalSecondFactor, permission_name: PermissionName.UniversalSecondFactor,
availableInRoles: [RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.ProPlan],
name: 'Unlimited note history', name: 'Unlimited note history',
identifier: FeatureIdentifier.NoteHistoryUnlimited, identifier: FeatureIdentifier.NoteHistoryUnlimited,
permission_name: PermissionName.NoteHistoryUnlimited, permission_name: PermissionName.NoteHistoryUnlimited,
availableInRoles: [RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.PlusPlan], availableInSubscriptions: [SubscriptionName.PlusPlan],
name: '365 days note history', name: '365 days note history',
identifier: FeatureIdentifier.NoteHistory365Days, identifier: FeatureIdentifier.NoteHistory365Days,
permission_name: PermissionName.NoteHistory365Days, permission_name: PermissionName.NoteHistory365Days,
availableInRoles: [RoleName.NAMES.PlusUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Email backups', name: 'Email backups',
identifier: FeatureIdentifier.DailyEmailBackup, identifier: FeatureIdentifier.DailyEmailBackup,
permission_name: PermissionName.DailyEmailBackup, permission_name: PermissionName.DailyEmailBackup,
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Sign-in email alerts', name: 'Sign-in email alerts',
identifier: FeatureIdentifier.SignInAlerts, identifier: FeatureIdentifier.SignInAlerts,
permission_name: PermissionName.SignInAlerts, permission_name: PermissionName.SignInAlerts,
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.ProPlan],
identifier: FeatureIdentifier.FilesMaximumStorageTier, identifier: FeatureIdentifier.FilesMaximumStorageTier,
permission_name: PermissionName.FilesMaximumStorageTier, permission_name: PermissionName.FilesMaximumStorageTier,
availableInRoles: [RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.PlusPlan], availableInSubscriptions: [SubscriptionName.PlusPlan],
identifier: FeatureIdentifier.FilesLowStorageTier, identifier: FeatureIdentifier.FilesLowStorageTier,
permission_name: PermissionName.FilesLowStorageTier, permission_name: PermissionName.FilesLowStorageTier,
availableInRoles: [RoleName.NAMES.PlusUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.ProPlan],
identifier: FeatureIdentifier.SubscriptionSharing, identifier: FeatureIdentifier.SubscriptionSharing,
permission_name: PermissionName.SubscriptionSharing, permission_name: PermissionName.SubscriptionSharing,
availableInRoles: [RoleName.NAMES.ProUser],
}, },
{ {
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan], availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Listed Custom Domain', name: 'Listed Custom Domain',
identifier: FeatureIdentifier.ListedCustomDomain, identifier: FeatureIdentifier.ListedCustomDomain,
permission_name: PermissionName.ListedCustomDomain, permission_name: PermissionName.ListedCustomDomain,
availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
}, },
] ]
} }

View File

@@ -83,13 +83,13 @@ const NoteListItem: FunctionComponent<DisplayableListItemProps<SNNote>> = ({
onClick={onClick} onClick={onClick}
> >
{!hideIcon ? ( {!hideIcon ? (
<div className="mr-0 flex flex-col items-center gap-2 p-4 pr-4"> <div className="mr-0 flex flex-col items-center justify-between gap-2 p-4 pr-4">
<Icon type={icon} className={`text-accessory-tint-${tint}`} />
{item.pinned && ( {item.pinned && (
<div className="rounded-full bg-info p-1 text-info-contrast"> <div className="rounded-full bg-info p-1 text-info-contrast">
<Icon type="pin-filled" size="custom" className="h-3 w-3" /> <Icon type="pin-filled" size="custom" className="h-3 w-3" />
</div> </div>
)} )}
<Icon type={icon} className={`text-accessory-tint-${tint}`} />
</div> </div>
) : ( ) : (
<div className="pr-4" /> <div className="pr-4" />