diff --git a/src/apps/work/src/lib/components/PaymentFormModal/PaymentFormModal.spec.tsx b/src/apps/work/src/lib/components/PaymentFormModal/PaymentFormModal.spec.tsx
index 47ac68dc7..3ec6d0015 100644
--- a/src/apps/work/src/lib/components/PaymentFormModal/PaymentFormModal.spec.tsx
+++ b/src/apps/work/src/lib/components/PaymentFormModal/PaymentFormModal.spec.tsx
@@ -1,6 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies, ordered-imports/ordered-imports */
import {
render,
+ screen,
} from '@testing-library/react'
import type { Assignment } from '../../models'
@@ -52,7 +53,7 @@ jest.mock('../../utils', () => ({
}))
jest.mock('../../constants', () => ({
- BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED: false,
+ BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED: true,
}))
describe('PaymentFormModal', () => {
@@ -92,4 +93,24 @@ describe('PaymentFormModal', () => {
preventOpenOnFocus: true,
}))
})
+
+ it('shows billing account id when enabled', () => {
+ render(
+ ,
+ )
+
+ expect(screen.getByText('Billing Account'))
+ .toBeTruthy()
+ expect(screen.getByText('80001063'))
+ .toBeTruthy()
+ })
})
diff --git a/src/apps/work/src/lib/components/PaymentHistoryModal/PaymentHistoryModal.spec.tsx b/src/apps/work/src/lib/components/PaymentHistoryModal/PaymentHistoryModal.spec.tsx
index e4688e855..0338e3a0b 100644
--- a/src/apps/work/src/lib/components/PaymentHistoryModal/PaymentHistoryModal.spec.tsx
+++ b/src/apps/work/src/lib/components/PaymentHistoryModal/PaymentHistoryModal.spec.tsx
@@ -13,7 +13,7 @@ jest.mock('../../hooks', () => ({
}))
jest.mock('../../constants', () => ({
- BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED: false,
+ BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED: true,
}))
jest.mock('~/libs/ui', () => ({
@@ -48,7 +48,7 @@ describe('PaymentHistoryModal', () => {
mockUseFetchAssignmentPayments.mockReset()
})
- it('renders clickable remarks links and the payment creator handle', async () => {
+ it('renders clickable remarks links, the payment creator handle, and fee details', async () => {
mockUseFetchAssignmentPayments.mockReturnValue({
error: undefined,
isLoading: false,
@@ -96,9 +96,9 @@ describe('PaymentHistoryModal', () => {
.toBeTruthy()
expect(screen.getByText('payment.manager'))
.toBeTruthy()
- expect(screen.queryByText('Fee:'))
- .toBeNull()
- expect(screen.queryByText('$18.60'))
- .toBeNull()
+ expect(screen.getByText('Fee:'))
+ .toBeTruthy()
+ expect(screen.getByText('$18.60'))
+ .toBeTruthy()
})
})
diff --git a/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.spec.tsx b/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.spec.tsx
index 9d0d65f46..1f19af869 100644
--- a/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.spec.tsx
+++ b/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.spec.tsx
@@ -1,5 +1,6 @@
/* eslint-disable import/no-extraneous-dependencies, ordered-imports/ordered-imports */
import {
+ fireEvent,
render,
screen,
} from '@testing-library/react'
@@ -34,10 +35,16 @@ jest.mock('../BillingAccountLineItemsModal', () => ({
),
}))
-jest.mock('../../constants', () => ({
- BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: false,
- BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: false,
-}))
+jest.mock('../../constants', () => {
+ const constants = {
+ BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: true,
+ BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: true,
+ }
+
+ Object.assign(globalThis, { mockWorkConstants: constants })
+
+ return constants
+})
jest.mock('~/libs/ui', () => ({
IconOutline: {
@@ -55,6 +62,22 @@ const mockedUseFetchProjectBillingAccount = useFetchProjectBillingAccount as jes
typeof useFetchProjectBillingAccount
>
+interface MockWorkConstants {
+ BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: boolean
+ BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: boolean
+}
+
+/**
+ * Returns the mutable constants mock installed for this spec.
+ *
+ * @returns Work app billing feature flag state used by mocked constants.
+ */
+function getMockWorkConstants(): MockWorkConstants {
+ return (globalThis as unknown as {
+ mockWorkConstants: MockWorkConstants
+ }).mockWorkConstants
+}
+
const billingAccountDetails: BillingAccountDetails = {
budget: 1000,
consumedAmounts: [],
@@ -99,6 +122,9 @@ describe('ProjectBillingAccountExpiredNotice', () => {
beforeEach(() => {
jest.clearAllMocks()
+ getMockWorkConstants().BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = true
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
+
mockedUseFetchBillingAccounts.mockReturnValue({
billingAccounts: [],
error: undefined,
@@ -124,6 +150,9 @@ describe('ProjectBillingAccountExpiredNotice', () => {
})
it('hides billing account budget and line-item details while billing details are disabled', () => {
+ getMockWorkConstants().BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = false
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = false
+
renderNotice()
expect(screen.getByText(/Billing account:/))
@@ -147,18 +176,19 @@ describe('ProjectBillingAccountExpiredNotice', () => {
.toBeTruthy()
expect(screen.getByText(/80001063/))
.toBeTruthy()
- expect(screen.queryByText('$1,025 / $1,000 spent'))
- .toBeNull()
- expect(screen.queryByText(/The billing account for this project has insufficient remaining funds,/))
- .toBeNull()
- expect(screen.queryByRole('link', { name: 'click here to update' }))
- .toBeNull()
- expect(screen.queryByRole('button', {
+ expect(screen.getByText('$1,025 / $1,000 spent'))
+ .toBeTruthy()
+ expect(screen.getByText(/The billing account for this project has insufficient remaining funds,/))
+ .toBeTruthy()
+ expect(screen.getByRole('link', { name: 'click here to update' }))
+ .toBeTruthy()
+ fireEvent.click(screen.getByRole('button', {
name: 'View billing account details',
}))
- .toBeNull()
- expect(screen.queryByRole('dialog'))
- .toBeNull()
+
+ expect(screen.getByRole('dialog')
+ .textContent)
+ .toContain('Billing account details for 80001063')
})
it('shows member payments remaining instead of spent and total budget for copilots', () => {
@@ -185,6 +215,8 @@ describe('ProjectBillingAccountExpiredNotice', () => {
isLoading: false,
})
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
+
renderNotice({
...defaultContextValue,
isCopilot: true,
@@ -197,7 +229,8 @@ describe('ProjectBillingAccountExpiredNotice', () => {
.toBeNull()
})
- it('hides member payment details and billing account modal access from copilots when disabled', () => {
+ it('hides the inline member payment balance but keeps billing account modal access for copilots '
+ + 'when disabled', () => {
mockedUseFetchBillingAccountDetails.mockReturnValue({
billingAccountDetails: {
...billingAccountDetails,
@@ -210,6 +243,8 @@ describe('ProjectBillingAccountExpiredNotice', () => {
isLoading: false,
})
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
+
renderNotice({
...defaultContextValue,
isCopilot: true,
@@ -220,11 +255,14 @@ describe('ProjectBillingAccountExpiredNotice', () => {
.toBeNull()
expect(screen.queryByText('$750 / $1,000 spent'))
.toBeNull()
- expect(screen.queryByRole('button', {
+ fireEvent.click(screen.getByRole('button', {
name: 'View billing account details',
}))
- .toBeNull()
+
+ expect(screen.getByRole('dialog')
+ .textContent)
+ .toContain('Billing account details for 80001063')
expect(mockedUseFetchBillingAccountDetails)
- .toHaveBeenCalledWith(undefined)
+ .toHaveBeenCalledWith('80001063')
})
})
diff --git a/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.tsx b/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.tsx
index eaa72dd62..96a3c130f 100644
--- a/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.tsx
+++ b/src/apps/work/src/lib/components/ProjectBillingAccountExpiredNotice/ProjectBillingAccountExpiredNotice.tsx
@@ -106,13 +106,13 @@ function isRestrictedCopilot(workAppContext: WorkAppContextModel): boolean {
}
/**
- * Resolves whether the current user may see project payment details.
+ * Resolves whether the current user may see inline project payment amounts.
*
* @param workAppContext Current work app user context.
* @param displayMemberPaymentDetailsToCopilots Project-level copilot display flag.
- * @returns `true` when payment amounts and the line-item modal may be shown.
+ * @returns `true` when payment amounts may be shown in the notice summary.
*/
-function canShowProjectPaymentDetails(
+function canShowProjectPaymentAmounts(
workAppContext: WorkAppContextModel,
displayMemberPaymentDetailsToCopilots: boolean | undefined,
): boolean {
@@ -124,20 +124,20 @@ function canShowProjectPaymentDetails(
* Resolves whether the copilot-safe member-payment balance should be shown.
*
* @param workAppContext Current work app user context.
- * @param showPaymentDetails Whether payment details are enabled for this project.
+ * @param showPaymentAmounts Whether payment amounts are enabled for this project.
* @returns `true` when the user should see member payments remaining.
*/
function canShowMemberPaymentsRemaining(
workAppContext: WorkAppContextModel,
- showPaymentDetails: boolean,
+ showPaymentAmounts: boolean,
): boolean {
- return showPaymentDetails && isRestrictedCopilot(workAppContext)
+ return showPaymentAmounts && isRestrictedCopilot(workAppContext)
}
interface VisibleBudgetInfoParams {
copilotBudgetInfo: CopilotMemberPaymentsBudgetInfo | undefined
showMemberPaymentsRemaining: boolean
- showPaymentDetails: boolean
+ showPaymentAmounts: boolean
standardBudgetInfo: BillingAccountBudgetInfo | undefined
}
@@ -150,7 +150,7 @@ interface VisibleBudgetInfoParams {
function getVisibleBudgetInfo(
params: VisibleBudgetInfoParams,
): BillingAccountBudgetInfo | undefined {
- if (!params.showPaymentDetails) {
+ if (!params.showPaymentAmounts) {
return undefined
}
@@ -198,10 +198,10 @@ function renderBudgetDisplayContent(
}
/**
- * Hides budget-derived billing account notices while budget display is disabled.
+ * Hides budget-derived billing account notices when budget display is disabled.
*
* @param billingAccountIssue The billing account issue resolved for the project.
- * @returns The issue to display, or `undefined` when the temporary hide applies.
+ * @returns The issue to display, or `undefined` when budget display is disabled.
*/
function getVisibleBillingAccountIssue(
billingAccountIssue: BillingAccountIssue,
@@ -260,7 +260,7 @@ const BillingAccountDetailsContent: FC = (
}
/**
- * Renders the temporarily enabled/disabled line-item modal.
+ * Renders the gated billing-account line-item modal.
*
* @param billingAccountDetails Billing account detail payload, if loaded.
* @param isModalOpen Whether the details modal has been requested.
@@ -340,14 +340,15 @@ export const ProjectBillingAccountExpiredNotice: FC {
const [isModalOpen, setIsModalOpen] = useState(false)
const workAppContext: WorkAppContextModel = useContext(WorkAppContext)
- const showPaymentDetails: boolean = canShowProjectPaymentDetails(
+ const showPaymentAmounts: boolean = canShowProjectPaymentAmounts(
workAppContext,
props.displayMemberPaymentDetailsToCopilots,
)
const showMemberPaymentsRemaining: boolean = canShowMemberPaymentsRemaining(
workAppContext,
- showPaymentDetails,
+ showPaymentAmounts,
)
+ const showMemberPaymentsRemainingInModal: boolean = isRestrictedCopilot(workAppContext)
const projectBillingAccountResult: UseFetchProjectBillingAccountResult = useFetchProjectBillingAccount(
props.projectId,
@@ -356,9 +357,9 @@ export const ProjectBillingAccountExpiredNotice: FC
)
: undefined
@@ -442,7 +443,7 @@ export const ProjectBillingAccountExpiredNotice: FC ({
),
}))
-jest.mock('../../constants', () => ({
- BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: false,
- BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: false,
- PROJECT_STATUS: {
- DRAFT: 'draft',
- },
-}))
+jest.mock('../../constants', () => {
+ const constants = {
+ BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: true,
+ BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: true,
+ PROJECT_STATUS: {
+ DRAFT: 'draft',
+ },
+ }
+
+ Object.assign(globalThis, { mockWorkConstants: constants })
+
+ return constants
+})
jest.mock('../../utils', () => ({
buildProjectChallengesPath: (projectId: string | number) => (
@@ -88,6 +95,22 @@ const mockedUseFetchBillingAccountDetails = useFetchBillingAccountDetails as jes
>
const mockedUseFetchBillingAccounts = useFetchBillingAccounts as jest.MockedFunction
+interface MockWorkConstants {
+ BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED: boolean
+ BILLING_ACCOUNT_DETAILS_MODAL_ENABLED: boolean
+}
+
+/**
+ * Returns the mutable constants mock installed for this spec.
+ *
+ * @returns Work app billing feature flag state used by mocked constants.
+ */
+function getMockWorkConstants(): MockWorkConstants {
+ return (globalThis as unknown as {
+ mockWorkConstants: MockWorkConstants
+ }).mockWorkConstants
+}
+
const billingAccountDetails: BillingAccountDetails = {
budget: 1000,
consumedAmounts: [],
@@ -126,6 +149,9 @@ describe('ProjectsTable', () => {
beforeEach(() => {
jest.clearAllMocks()
+ getMockWorkConstants().BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = true
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
+
mockedUseFetchBillingAccounts.mockReturnValue({
billingAccounts: [],
error: undefined,
@@ -170,6 +196,9 @@ describe('ProjectsTable', () => {
})
it('hides billing account spent totals and line-item details while billing details are disabled', () => {
+ getMockWorkConstants().BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = false
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = false
+
mockedUseFetchBillingAccounts.mockReturnValue({
billingAccounts: [
{
@@ -209,6 +238,47 @@ describe('ProjectsTable', () => {
.toBeNull()
})
+ it('shows billing account spent totals and line-item details when enabled', () => {
+ mockedUseFetchBillingAccounts.mockReturnValue({
+ billingAccounts: [
+ {
+ budget: 1000,
+ consumedBudget: 225,
+ id: 80001063,
+ lockedBudget: 125,
+ name: 'Access BA',
+ totalBudgetRemaining: 650,
+ },
+ ],
+ error: undefined,
+ isError: false,
+ isLoading: false,
+ })
+ mockedUseFetchBillingAccountDetails.mockReturnValue({
+ billingAccountDetails,
+ error: undefined,
+ isError: false,
+ isLoading: false,
+ })
+
+ renderTable([{
+ ...invitedProject,
+ billingAccountId: 80001063,
+ }])
+
+ expect(screen.getAllByText('$350 / $1,000 spent').length)
+ .toBeGreaterThan(0)
+ fireEvent.click(screen.getAllByRole('button', {
+ name: 'View billing account details',
+ })[0])
+
+ expect(screen.getByRole('dialog')
+ .textContent)
+ .toContain('Billing account details for 80001063')
+ expect(mockedUseFetchBillingAccountDetails)
+ .toHaveBeenCalledWith('80001063')
+ })
+
it('shows member payments remaining for copilot project rows', () => {
mockedUseFetchBillingAccounts.mockReturnValue({
billingAccounts: [
@@ -227,6 +297,8 @@ describe('ProjectsTable', () => {
isLoading: false,
})
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
+
renderTable(
[{
...invitedProject,
@@ -248,7 +320,8 @@ describe('ProjectsTable', () => {
.toBeNull()
})
- it('hides payment amounts and billing details access for copilot project rows when disabled', () => {
+ it('hides inline payment amounts but keeps billing details available for copilot project rows '
+ + 'when disabled', () => {
mockedUseFetchBillingAccounts.mockReturnValue({
billingAccounts: [
{
@@ -265,6 +338,14 @@ describe('ProjectsTable', () => {
isError: false,
isLoading: false,
})
+ mockedUseFetchBillingAccountDetails.mockReturnValue({
+ billingAccountDetails,
+ error: undefined,
+ isError: false,
+ isLoading: false,
+ })
+
+ getMockWorkConstants().BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
renderTable(
[{
@@ -285,9 +366,12 @@ describe('ProjectsTable', () => {
.toBeNull()
expect(screen.queryByText('$750 / $1,000 spent'))
.toBeNull()
- expect(screen.queryByRole('button', {
+ fireEvent.click(screen.getAllByRole('button', {
name: 'View billing account details',
- }))
- .toBeNull()
+ })[0])
+
+ expect(screen.getByRole('dialog')
+ .textContent)
+ .toContain('Billing account details for 80001063')
})
})
diff --git a/src/apps/work/src/lib/components/ProjectsTable/ProjectsTable.tsx b/src/apps/work/src/lib/components/ProjectsTable/ProjectsTable.tsx
index f875c799b..5de3da688 100644
--- a/src/apps/work/src/lib/components/ProjectsTable/ProjectsTable.tsx
+++ b/src/apps/work/src/lib/components/ProjectsTable/ProjectsTable.tsx
@@ -162,13 +162,13 @@ function isRestrictedCopilot(workAppContext: WorkAppContextModel): boolean {
}
/**
- * Resolves whether the current user may see payment details for one project row.
+ * Resolves whether the current user may see inline payment amounts for one project row.
*
* @param workAppContext Current work app user context.
* @param project Project row being rendered.
- * @returns `true` when payment amounts and the line-item modal may be shown.
+ * @returns `true` when payment amounts may be shown in the row summary.
*/
-function canShowProjectPaymentDetails(
+function canShowProjectPaymentAmounts(
workAppContext: WorkAppContextModel,
project: Project,
): boolean {
@@ -246,8 +246,9 @@ function getBillingAccountDisplay(
interface ProjectBillingAccountCellProps {
billingAccount: BillingAccount | undefined
project: Project
- showPaymentDetails: boolean
+ showPaymentAmounts: boolean
showMemberPaymentsRemaining: boolean
+ showMemberPaymentsRemainingInModal: boolean
}
interface ProjectBillingBudgetDisplayState {
@@ -267,27 +268,25 @@ interface RenderProjectBillingAccountModalParams {
* Resolves whether the billing-account details hook should fetch modal data.
*
* @param isModalOpen Whether the row details modal has been opened.
- * @param showPaymentDetails Whether the current user may see payment details.
* @returns `true` when the modal feature is enabled and data should be fetched.
*/
function canFetchProjectBillingAccountDetails(
isModalOpen: boolean,
- showPaymentDetails: boolean,
): boolean {
- return BILLING_ACCOUNT_DETAILS_MODAL_ENABLED && isModalOpen && showPaymentDetails
+ return BILLING_ACCOUNT_DETAILS_MODAL_ENABLED && isModalOpen
}
/**
* Selects the visible budget state for one project billing-account row.
*
* @param billingAccount Billing-account summary attached to the project row.
- * @param showPaymentDetails Whether the current user may see payment details.
+ * @param showPaymentAmounts Whether the current user may see inline payment amounts.
* @param showMemberPaymentsRemaining Whether the current user needs the copilot-safe member payment view.
* @returns Budget data to render, with copilot budget data included when needed.
*/
function getProjectBillingBudgetDisplayState(
billingAccount: BillingAccount | undefined,
- showPaymentDetails: boolean,
+ showPaymentAmounts: boolean,
showMemberPaymentsRemaining: boolean,
): ProjectBillingBudgetDisplayState {
if (showMemberPaymentsRemaining) {
@@ -299,7 +298,7 @@ function getProjectBillingBudgetDisplayState(
}
}
- if (!BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED || !showPaymentDetails) {
+ if (!BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED || !showPaymentAmounts) {
return {
budgetInfo: undefined,
copilotBudgetInfo: undefined,
@@ -350,16 +349,14 @@ function renderProjectBillingAccountBudget(
* Renders the billing-account line-item details button when the feature is enabled.
*
* @param billingAccountId Normalized billing-account id for the current row.
- * @param showPaymentDetails Whether the current user may open payment details.
* @param onOpen Open handler for the row modal.
* @returns The details button, or `undefined` when unavailable.
*/
function renderProjectBillingAccountDetailsButton(
billingAccountId: string | undefined,
- showPaymentDetails: boolean,
onOpen: () => void,
): JSX.Element | undefined {
- if (!BILLING_ACCOUNT_DETAILS_MODAL_ENABLED || !billingAccountId || !showPaymentDetails) {
+ if (!BILLING_ACCOUNT_DETAILS_MODAL_ENABLED || !billingAccountId) {
return undefined
}
@@ -417,13 +414,13 @@ const ProjectBillingAccountCell: FC = (
const normalizedBillingAccountId = normalizeOptionalString(props.project.billingAccountId)
|| normalizeOptionalString(props.billingAccount?.id)
const billingAccountDetailsResult: UseFetchBillingAccountDetailsResult = useFetchBillingAccountDetails(
- canFetchProjectBillingAccountDetails(isModalOpen, props.showPaymentDetails)
+ canFetchProjectBillingAccountDetails(isModalOpen)
? normalizedBillingAccountId
: undefined,
)
const budgetDisplayState = getProjectBillingBudgetDisplayState(
props.billingAccount,
- props.showPaymentDetails,
+ props.showPaymentAmounts,
props.showMemberPaymentsRemaining,
)
const billingAccountBudget = renderProjectBillingAccountBudget(
@@ -440,7 +437,6 @@ const ProjectBillingAccountCell: FC = (
}, [])
const billingAccountDetailsButton = renderProjectBillingAccountDetailsButton(
normalizedBillingAccountId,
- props.showPaymentDetails,
handleOpenModal,
)
const billingAccountModal = renderProjectBillingAccountModal({
@@ -448,7 +444,7 @@ const ProjectBillingAccountCell: FC = (
isModalOpen,
onClose: handleCloseModal,
projectId: props.project.id,
- showMemberPaymentsRemaining: props.showMemberPaymentsRemaining,
+ showMemberPaymentsRemaining: props.showMemberPaymentsRemainingInModal,
})
return (
@@ -524,8 +520,9 @@ export const ProjectsTable: FC = (props: ProjectsTableProps)
billingAccount={billingAccountsById.get(String(project.billingAccountId))}
project={project}
showMemberPaymentsRemaining={isRestrictedCopilot(workAppContext)
- && canShowProjectPaymentDetails(workAppContext, project)}
- showPaymentDetails={canShowProjectPaymentDetails(workAppContext, project)}
+ && canShowProjectPaymentAmounts(workAppContext, project)}
+ showMemberPaymentsRemainingInModal={isRestrictedCopilot(workAppContext)}
+ showPaymentAmounts={canShowProjectPaymentAmounts(workAppContext, project)}
/>
),
type: 'element',
@@ -614,8 +611,9 @@ export const ProjectsTable: FC = (props: ProjectsTableProps)
billingAccount={billingAccountsById.get(String(project.billingAccountId))}
project={project}
showMemberPaymentsRemaining={isRestrictedCopilot(workAppContext)
- && canShowProjectPaymentDetails(workAppContext, project)}
- showPaymentDetails={canShowProjectPaymentDetails(workAppContext, project)}
+ && canShowProjectPaymentAmounts(workAppContext, project)}
+ showMemberPaymentsRemainingInModal={isRestrictedCopilot(workAppContext)}
+ showPaymentAmounts={canShowProjectPaymentAmounts(workAppContext, project)}
/>
)}
canEdit={canEditProject(project)}
diff --git a/src/apps/work/src/lib/constants.ts b/src/apps/work/src/lib/constants.ts
index c7fde3d60..b05392525 100644
--- a/src/apps/work/src/lib/constants.ts
+++ b/src/apps/work/src/lib/constants.ts
@@ -2,11 +2,11 @@ import { EnvironmentConfig } from '~/config'
export const WORK_APP_BODY_CLASS = 'work-app'
-export const BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = false
+export const BILLING_ACCOUNT_BUDGET_DISPLAY_ENABLED = true
-export const BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = false
+export const BILLING_ACCOUNT_DETAILS_MODAL_ENABLED = true
-export const BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED = false
+export const BILLING_ACCOUNT_MEMBER_PAYMENT_DETAILS_ENABLED = true
const DEFAULT_CREATE_FORUM_TYPE_IDS = [
'927abff4-7af9-4145-8ba1-577c16e64e2e',