-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
What's done so far: - Created the new "subscription" view - Recovered the menu link to this new page - Show a table with the current subscription. It's been done as a table since it looks like it, but I'm not sure if it's useful considering there aren't plans for multiple subscriptions - Removed the "open modal" temporary button from the main menu - Such modal can now be opened using the "view plans & pricing" button in the new page - A new Subscription Provider/Context has been created, with a `permissions` method in order to check for permissions of the current plan, but it has not been applied yet anywhere - The pricing modal has been minimally changed to allow setting a custom title, and moving its contents into an independent component - Created modals for the different tier/plan upgrade scenarios
- Loading branch information
1 parent
c252b71
commit 1d79126
Showing
30 changed files
with
1,211 additions
and
399 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
import { createContext } from '@chakra-ui/react-utils' | ||
import { useQuery } from '@tanstack/react-query' | ||
import { useClient } from '@vocdoni/react-providers' | ||
import { dotobject, ensure0x } from '@vocdoni/sdk' | ||
import { ReactNode, useMemo } from 'react' | ||
import { useAuth } from '~components/Auth/useAuth' | ||
import { ApiEndpoints } from './api' | ||
|
||
type PermissionsContextType = { | ||
permission: (key: string) => any | ||
subscription: SubscriptionType | ||
loading: boolean | ||
} | ||
|
||
type SubscriptionType = { | ||
subscriptionDetails: { | ||
planID: number | ||
startDate: string // ISO 8601 Date String | ||
endDate: string // ISO 8601 Date String | ||
renewalDate: string // ISO 8601 Date String | ||
active: boolean | ||
maxCensusSize: number | ||
} | ||
usage: { | ||
sentSMS: number | ||
sentEmails: number | ||
subOrgs: number | ||
members: number | ||
} | ||
plan: { | ||
id: number | ||
name: string | ||
stripeID: string | ||
default: boolean | ||
organization: { | ||
memberships: number | ||
subOrgs: number | ||
censusSize: number | ||
} | ||
votingTypes: { | ||
approval: boolean | ||
ranked: boolean | ||
weighted: boolean | ||
} | ||
features: { | ||
personalization: boolean | ||
emailReminder: boolean | ||
smsNotification: boolean | ||
} | ||
} | ||
} | ||
|
||
const [SubscriptionProvider, useSubscription] = createContext<PermissionsContextType>({ | ||
name: 'PermissionsContext', | ||
errorMessage: 'usePermissions must be used within a PermissionsProvider', | ||
}) | ||
|
||
const SubscriptionProviderComponent: React.FC<{ children: ReactNode }> = ({ children }) => { | ||
const { bearedFetch } = useAuth() | ||
const { account } = useClient() | ||
|
||
// Fetch organization subscription details | ||
// TODO: In the future, this may be merged with the role permissions (not yet defined) | ||
const { data: subscription, isFetching } = useQuery({ | ||
queryKey: ['organizationSubscription', account?.address], | ||
queryFn: () => | ||
bearedFetch<SubscriptionType>( | ||
ApiEndpoints.OrganizationSubscription.replace('{address}', ensure0x(account?.address)) | ||
), | ||
// Cache for 15 minutes | ||
staleTime: 15 * 60 * 1000, | ||
enabled: !!account?.address, | ||
}) | ||
|
||
// Helper function to access permission using dot notation | ||
const permission = useMemo(() => { | ||
return (key: string) => { | ||
if (!subscription || !subscription.plan) return undefined | ||
return dotobject(subscription.plan, key) | ||
} | ||
}, [subscription]) | ||
|
||
return <SubscriptionProvider value={{ permission, subscription, loading: isFetching }} children={children} /> | ||
} | ||
|
||
export { SubscriptionProviderComponent as SubscriptionProvider, useSubscription } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.