Skip to content
26 changes: 23 additions & 3 deletions web/sdk/react/contexts/FrontierProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@ import { withMaxAllowedInstancesGuard } from './useMaxAllowedInstancesGuard';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { TransportProvider } from '@connectrpc/connect-query';
import { createConnectTransport } from '@connectrpc/connect-web';
import { useMemo } from 'react';
import { ComponentType, ReactNode, useMemo } from 'react';
import { createFetchWithCreds } from '../utils/fetch';
import { Toast } from '@raystack/apsara-v1';

export const multipleFrontierProvidersError =
"Frontier: You've added multiple <FrontierProvider> components in your React component tree. Wrap your components in a single <FrontierProvider>.";

export const queryClient = new QueryClient();

export const FrontierProvider = (props: FrontierProviderProps) => {
const { children, initialState, config, theme, customHeaders, ...options } =
const { children, initialState, config, theme, customHeaders, renderThemeProvider = true, renderToastProvider = true, ...options } =
props;

const transport = useMemo(
Expand All @@ -36,7 +37,11 @@ export const FrontierProvider = (props: FrontierProviderProps) => {
config={config}
{...options}
>
<ThemeProvider {...theme}>{children}</ThemeProvider>
<OptionalProvider provider={ThemeProvider} shouldRender={renderThemeProvider} providerProps={theme}>
<OptionalProvider provider={Toast.Provider} shouldRender={renderToastProvider}>
{children}
</OptionalProvider>
</OptionalProvider>
</FrontierContextProvider>
</CustomizationProvider>
</TransportProvider>
Expand All @@ -51,3 +56,18 @@ export const FrontierProviderGaurd =
'FrontierProvider',
multipleFrontierProvidersError
);

export const OptionalProvider = <T extends { children?: ReactNode }>({
children,
provider: Provider,
shouldRender = true,
providerProps
}: {
children?: ReactNode;
provider: ComponentType<T>;
shouldRender?: boolean;
providerProps?: Omit<T, 'children'>;
}) => {
if (shouldRender) return <Provider {...(providerProps as T)}>{children}</Provider>;
return children
};
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ export function BillingDetailsCard({
}: BillingDetailsCardProps) {
const btnText =
billingAccount?.email || billingAccount?.name ? 'Update' : 'Add details';
const isButtonDisabled = isLoading || disabled || isActionLoading;
const isRestricted = isLoading || disabled;
const isButtonDisabled = isRestricted || isActionLoading;

const address = convertBillingAddressToString(billingAccount?.address);

Expand All @@ -37,7 +38,7 @@ export function BillingDetailsCard({
{!isLoading && isAllowed ? (
<Tooltip>
<Tooltip.Trigger
disabled={!isButtonDisabled}
disabled={!isRestricted}
render={<span />}
>
<Button
Expand All @@ -53,7 +54,7 @@ export function BillingDetailsCard({
{btnText}
</Button>
</Tooltip.Trigger>
{isButtonDisabled && (
{isRestricted && (
<Tooltip.Content>
Contact support to update your billing address.
</Tooltip.Content>
Expand Down
4 changes: 3 additions & 1 deletion web/sdk/react/views-new/billing/components/invoices.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,9 @@ export function Invoices() {
<DataTable.DisplayControls
/>
</Flex>
<DataTable.Content
<DataTable.VirtualizedContent
rowHeight={48}
groupHeaderHeight={48}
emptyState={isError ? <ErrorState /> : <NoInvoices />}
/>
</Flex>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ export const getColumns = ({
accessorKey: 'id',
enableSorting: false,
styles: {
cell: { width: '48px' }
cell: { width: '48px' },
header: { width: '48px' }
},
cell: ({ row }) => {
const member = row.original;
Expand Down
3 changes: 3 additions & 0 deletions web/sdk/react/views-new/members/members-view.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
border: none;
}

.table {
table-layout: fixed;
}

.menuContent {
min-width: 180px;
Expand Down
3 changes: 2 additions & 1 deletion web/sdk/react/views-new/members/members-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ export function MembersView({ showTeamField = true }: MembersViewProps) {
/>
}
classNames={{
root: styles.tableRoot
root: styles.tableRoot,
table: styles.table
}}
/>
</Flex>
Expand Down
1 change: 0 additions & 1 deletion web/sdk/react/views-new/preferences/preferences-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export function PreferencesView({ children }: PreferencesViewProps) {
const { theme, setTheme } = useTheme();
const { preferences, isLoading, isFetching, updatePreferences } =
usePreferences({});
console.log(theme);

const newsletterValue =
preferences?.[PREFERENCE_OPTIONS.NEWSLETTER]?.value ?? 'false';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ export function getColumns({
{
header: 'Role',
accessorKey: 'email',
styles: {
cell: { maxWidth: '300px' },
header: { maxWidth: '300px' }
},
cell: ({ row }) => {
const member = row.original;
const roleList = member.isTeam
Expand All @@ -95,7 +99,8 @@ export function getColumns({
accessorKey: 'id',
enableSorting: false,
styles: {
cell: { width: '32px' }
cell: { width: '32px' },
header: { width: '32px' }
},
cell: ({ row }) => {
if (!canUpdateProject) return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ export const getColumns = ({
header: 'Members',
accessorKey: 'membersCount',
enableSorting: false,
styles: {
cell: { maxWidth: '300px' },
header: { maxWidth: '300px' }
},
cell: ({ row }) => {
const project = row.original as Project;
return <MembersCell projectId={project.id || ''} />;
Expand All @@ -67,7 +71,8 @@ export const getColumns = ({
accessorKey: 'id',
enableSorting: false,
styles: {
cell: { width: '48px' }
cell: { width: '48px' },
header: { width: '48px' }
},
cell: ({ row }) => {
const project = row.original as Project;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
border: none;
}

.table {
table-layout: fixed;
}

.menuContent {
min-width: 160px;
}
Expand Down
3 changes: 2 additions & 1 deletion web/sdk/react/views-new/projects/project-details-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,8 @@ export function ProjectDetailsView({
/>
}
classNames={{
root: styles.tableRoot
root: styles.tableRoot,
table: styles.table
}}
/>
</Flex>
Expand Down
4 changes: 4 additions & 0 deletions web/sdk/react/views-new/projects/projects-view.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
border: none;
}

.table {
table-layout: fixed;
}

.menuContent {
min-width: 6;
}
3 changes: 2 additions & 1 deletion web/sdk/react/views-new/projects/projects-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,8 @@ export function ProjectsView({
/>
}
classNames={{
root: styles.tableRoot
root: styles.tableRoot,
table: styles.table
}}
/>
</Flex>
Expand Down
7 changes: 6 additions & 1 deletion web/sdk/react/views-new/teams/components/member-columns.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ export function getColumns({
{
header: 'Role',
accessorKey: 'email',
styles: {
cell: { maxWidth: '300px' },
header: { maxWidth: '300px' }
},
cell: ({ row }) => {
const member = row.original;
const roleList =
Expand All @@ -84,7 +88,8 @@ export function getColumns({
accessorKey: 'id',
enableSorting: false,
styles: {
cell: { width: '32px' }
cell: { width: '32px' },
header: { width: '32px' }
},
cell: ({ row }) => {
if (!canUpdateGroup) return null;
Expand Down
4 changes: 4 additions & 0 deletions web/sdk/react/views-new/teams/team-details-view.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
border: none;
}

.table {
table-layout: fixed;
}

.menuContent {
min-width: 160px;
}
Expand Down
3 changes: 2 additions & 1 deletion web/sdk/react/views-new/teams/team-details-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,8 @@ export function TeamDetailsView({
/>
}
classNames={{
root: styles.tableRoot
root: styles.tableRoot,
table: styles.table
}}
/>
</Flex>
Expand Down
1 change: 1 addition & 0 deletions web/sdk/react/views-new/tokens/tokens-view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ export function TokensView() {
);

const isLoading =
!activeOrganization?.id ||
isActiveOrganizationLoading ||
isBillingAccountLoading ||
isTokensLoading ||
Expand Down
2 changes: 2 additions & 0 deletions web/sdk/shared/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,6 @@ export interface FrontierProviderProps {
initialState?: InitialState;
customHeaders?: Record<string, CustomHeaderValue>;
theme?: ThemeProviderProps;
renderToastProvider?: boolean;
renderThemeProvider?: boolean;
}
Loading