Skip to content

Commit e74158f

Browse files
committed
debt: Remove legacy expense flow
1 parent 4434645 commit e74158f

39 files changed

Lines changed: 78 additions & 1828 deletions

components/collective-navbar/ActionsMenu.js

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,11 @@ import { ChevronDown } from '@styled-icons/feather/ChevronDown/ChevronDown';
77
import { AttachMoney } from '@styled-icons/material/AttachMoney';
88
import { Stack } from '@styled-icons/remix-line/Stack';
99
import { pickBy } from 'lodash';
10-
import { useRouter } from 'next/router';
1110
import { FormattedMessage } from 'react-intl';
1211
import styled, { css } from 'styled-components';
1312

1413
import { getContributeRoute } from '../../lib/collective';
15-
import { isSupportedExpenseType } from '../../lib/expenses';
16-
import { ExpenseType } from '../../lib/graphql/types/v2/graphql';
17-
import { PREVIEW_FEATURE_KEYS } from '../../lib/preview-features';
1814
import { getCollectivePageRoute, getDashboardRoute } from '../../lib/url-helpers';
19-
import { parseToBoolean } from '@/lib/utils';
2015

2116
import ActionButton from '../ActionButton';
2217
import AddFundsBtn from '../AddFundsBtn';
@@ -182,16 +177,6 @@ const CollectiveNavbarActionsMenu = ({
182177
const enabledCTAs = Object.keys(pickBy(callsToAction, Boolean));
183178
const isEmpty = enabledCTAs.length < 1;
184179
const hasOnlyOneHiddenCTA = enabledCTAs.length === 1 && hiddenActionForNonMobile === enabledCTAs[0];
185-
const router = useRouter();
186-
187-
const newExpenseFlowOptedOut = parseToBoolean(router?.query?.forceLegacyFlow);
188-
const isNewGrantFlowEnabled =
189-
!newExpenseFlowOptedOut && LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW);
190-
191-
const isNewExpenseFlowEnabled =
192-
!newExpenseFlowOptedOut &&
193-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) &&
194-
(!isSupportedExpenseType(collective, ExpenseType.GRANT) || isNewGrantFlowEnabled);
195180

196181
// Do not render the menu if there are no available CTAs
197182
if (isEmpty) {
@@ -227,33 +212,17 @@ const CollectiveNavbarActionsMenu = ({
227212
<Box as="ul" p={0} m={0} minWidth={184}>
228213
{callsToAction.hasSubmitExpense && (
229214
<MenuItem isHiddenOnMobile={hiddenActionForNonMobile === NAVBAR_ACTION_TYPE.SUBMIT_EXPENSE}>
230-
{isNewExpenseFlowEnabled ? (
231-
<StyledLink onClick={onOpenSubmitExpenseModalClick}>
232-
<Container p={ITEM_PADDING}>
233-
<Receipt size="20px" />
234-
<FormattedMessage id="ExpenseForm.Submit" defaultMessage="Submit expense" />
235-
</Container>
236-
</StyledLink>
237-
) : (
238-
<StyledLink
239-
data-cy="submit-expense-dropdown"
240-
as={Link}
241-
href={`${getCollectivePageRoute(collective)}/expenses/new?forceLegacyFlow=true`}
242-
>
243-
<Container p={ITEM_PADDING}>
244-
<Receipt size="20px" />
245-
<FormattedMessage id="ExpenseForm.Submit" defaultMessage="Submit expense" />
246-
</Container>
247-
</StyledLink>
248-
)}
215+
<StyledLink onClick={onOpenSubmitExpenseModalClick}>
216+
<Container p={ITEM_PADDING}>
217+
<Receipt size="20px" />
218+
<FormattedMessage id="ExpenseForm.Submit" defaultMessage="Submit expense" />
219+
</Container>
220+
</StyledLink>
249221
</MenuItem>
250222
)}
251223
{callsToAction.hasRequestGrant && (
252224
<MenuItem py={1} isHiddenOnMobile={hiddenActionForNonMobile === NAVBAR_ACTION_TYPE.REQUEST_GRANT}>
253-
<StyledLink
254-
as={Link}
255-
href={`${getCollectivePageRoute(collective)}/${isNewGrantFlowEnabled ? 'grants' : 'expenses'}/new`}
256-
>
225+
<StyledLink as={Link} href={`${getCollectivePageRoute(collective)}/grants/new`}>
257226
<Container p={ITEM_PADDING}>
258227
<MoneyCheckAlt size="20px" />
259228
<FormattedMessage id="ExpenseForm.Type.Request" defaultMessage="Request Grant" />

components/collective-navbar/index.js

Lines changed: 6 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@ import { display } from 'styled-system';
1818
import { expenseSubmissionAllowed, getContributeRoute, isIndividualAccount } from '../../lib/collective';
1919
import { getFilteredSectionsForCollective, isSectionEnabled } from '../../lib/collective-sections';
2020
import { CollectiveType } from '../../lib/constants/collectives';
21-
import { isSupportedExpenseType } from '../../lib/expenses';
2221
import { gql } from '../../lib/graphql/helpers';
23-
import { ExpenseType } from '../../lib/graphql/types/v2/graphql';
2422
import useGlobalBlur from '../../lib/hooks/useGlobalBlur';
2523
import useLoggedInUser from '../../lib/hooks/useLoggedInUser';
26-
import { PREVIEW_FEATURE_KEYS } from '../../lib/preview-features';
2724
import { getCollectivePageRoute, getDashboardRoute } from '../../lib/url-helpers';
2825
import theme from '@/lib/theme';
2926

@@ -326,14 +323,7 @@ const getDefaultCallsToActions = (collective, sections, isAdmin, LoggedInUser, i
326323
/**
327324
* Returns the main CTA that should be displayed as a button outside of the action menu in this component.
328325
*/
329-
const getMainAction = (
330-
collective,
331-
callsToAction,
332-
LoggedInUser,
333-
isNewExpenseFlowEnabled = false,
334-
isNewGrantFlowEnabled = false,
335-
onOpenSubmitExpenseModalClick = () => {},
336-
) => {
326+
const getMainAction = (collective, callsToAction, LoggedInUser, onOpenSubmitExpenseModalClick = () => {}) => {
337327
if (!collective || !callsToAction) {
338328
return null;
339329
}
@@ -362,7 +352,7 @@ const getMainAction = (
362352
return {
363353
type: NAVBAR_ACTION_TYPE.REQUEST_GRANT,
364354
component: (
365-
<Link href={`${getCollectivePageRoute(collective)}/${isNewGrantFlowEnabled ? 'grants' : 'expenses'}/new`}>
355+
<Link href={`${getCollectivePageRoute(collective)}/grants/new`}>
366356
<ActionButton tabIndex="-1">
367357
<MoneyCheckAlt size="1em" />
368358
<Span ml={2}>
@@ -375,22 +365,13 @@ const getMainAction = (
375365
} else if (callsToAction.includes('hasSubmitExpense')) {
376366
return {
377367
type: NAVBAR_ACTION_TYPE.SUBMIT_EXPENSE,
378-
component: isNewExpenseFlowEnabled ? (
368+
component: (
379369
<ActionButton tabIndex="-1" onClick={onOpenSubmitExpenseModalClick}>
380370
<Receipt size="1em" />
381371
<Span ml={2}>
382372
<FormattedMessage id="menu.submitExpense" defaultMessage="Submit Expense" />
383373
</Span>
384374
</ActionButton>
385-
) : (
386-
<Link href={`${getCollectivePageRoute(collective)}/expenses/new`} data-cy="submit-expense-dropdown">
387-
<ActionButton tabIndex="-1">
388-
<Receipt size="1em" />
389-
<Span ml={2}>
390-
<FormattedMessage id="menu.submitExpense" defaultMessage="Submit Expense" />
391-
</Span>
392-
</ActionButton>
393-
</Link>
394375
),
395376
};
396377
} else if (callsToAction.includes('hasManageSubscriptions')) {
@@ -482,12 +463,6 @@ const CollectiveNavbar = ({
482463

483464
const loading = isLoading || dataLoading;
484465

485-
const isNewGrantFlowEnabled = LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW);
486-
487-
const isNewExpenseFlowEnabled =
488-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) &&
489-
(!isSupportedExpenseType(collective, ExpenseType.GRANT) || isNewGrantFlowEnabled);
490-
491466
const isAllowedAddFunds = Boolean(data?.account?.permissions?.addFunds?.allowed);
492467
const sections = React.useMemo(() => {
493468
return sectionsFromParent || getFilteredSectionsForCollective(collective, isAdmin, isHostAdmin);
@@ -497,23 +472,11 @@ const CollectiveNavbar = ({
497472
...callsToAction,
498473
};
499474
const actionsArray = Object.keys(pickBy(callsToAction, Boolean));
500-
const mainAction = getMainAction(
501-
collective,
502-
actionsArray,
503-
LoggedInUser,
504-
isNewExpenseFlowEnabled,
505-
isNewGrantFlowEnabled,
506-
() => setIsSubmitExpenseModalOpen(true),
507-
);
475+
const mainAction = getMainAction(collective, actionsArray, LoggedInUser, () => setIsSubmitExpenseModalOpen(true));
508476
const secondAction =
509477
actionsArray.length === 2 &&
510-
getMainAction(
511-
collective,
512-
without(actionsArray, mainAction?.type),
513-
LoggedInUser,
514-
isNewExpenseFlowEnabled,
515-
isNewGrantFlowEnabled,
516-
() => setIsSubmitExpenseModalOpen(true),
478+
getMainAction(collective, without(actionsArray, mainAction?.type), LoggedInUser, () =>
479+
setIsSubmitExpenseModalOpen(true),
517480
);
518481
const navbarRef = useRef(undefined);
519482
const mainContainerRef = useRef(undefined);

components/dashboard/sections/expenses/PaymentRequests.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import {
1313
ExpenseType,
1414
PayoutMethodType,
1515
} from '../../../../lib/graphql/types/v2/graphql';
16-
import useLoggedInUser from '../../../../lib/hooks/useLoggedInUser';
1716
import useQueryFilter from '../../../../lib/hooks/useQueryFilter';
18-
import { PREVIEW_FEATURE_KEYS } from '../../../../lib/preview-features';
1917

2018
import MessageBoxGraphqlError from '@/components/MessageBoxGraphqlError';
2119

@@ -97,7 +95,6 @@ const PaymentRequests = ({ accountSlug }: DashboardSectionProps) => {
9795
const router = useRouter();
9896
const intl = useIntl();
9997
const [isExpenseFlowOpen, setIsExpenseFlowOpen] = React.useState(false);
100-
const { LoggedInUser } = useLoggedInUser();
10198

10299
const views: Views<FilterValues> = useMemo(
103100
() => [
@@ -177,9 +174,6 @@ const PaymentRequests = ({ accountSlug }: DashboardSectionProps) => {
177174
},
178175
});
179176

180-
const hasNewSubmitExpenseFlow =
181-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) || router.query.newExpenseFlowEnabled;
182-
183177
const pageRoute = `/dashboard/${accountSlug}/payment-requests`;
184178

185179
return (
@@ -194,11 +188,9 @@ const PaymentRequests = ({ accountSlug }: DashboardSectionProps) => {
194188
/>
195189
}
196190
actions={
197-
hasNewSubmitExpenseFlow ? (
198-
<Button onClick={() => setIsExpenseFlowOpen(true)} size="sm" className="gap-1">
199-
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
200-
</Button>
201-
) : null
191+
<Button onClick={() => setIsExpenseFlowOpen(true)} size="sm" className="gap-1">
192+
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
193+
</Button>
202194
}
203195
/>
204196
{isSelfHosted && (

components/dashboard/sections/expenses/ReceivedExpenses.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import {
1313
ExpenseType,
1414
PayoutMethodType,
1515
} from '../../../../lib/graphql/types/v2/graphql';
16-
import useLoggedInUser from '../../../../lib/hooks/useLoggedInUser';
1716
import useQueryFilter from '../../../../lib/hooks/useQueryFilter';
18-
import { PREVIEW_FEATURE_KEYS } from '../../../../lib/preview-features';
1917

2018
import MessageBoxGraphqlError from '@/components/MessageBoxGraphqlError';
2119

@@ -98,7 +96,6 @@ const ROUTE_PARAMS = ['slug', 'section', 'subpath'];
9896
const ReceivedExpenses = ({ accountSlug }: DashboardSectionProps) => {
9997
const router = useRouter();
10098
const [isExpenseFlowOpen, setIsExpenseFlowOpen] = React.useState(false);
101-
const { LoggedInUser } = useLoggedInUser();
10299

103100
const {
104101
data: metadata,
@@ -142,9 +139,6 @@ const ReceivedExpenses = ({ accountSlug }: DashboardSectionProps) => {
142139
},
143140
});
144141

145-
const hasNewSubmitExpenseFlow =
146-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) || router.query.newExpenseFlowEnabled;
147-
148142
const pageRoute = `/dashboard/${accountSlug}/expenses`;
149143

150144
return (
@@ -154,11 +148,9 @@ const ReceivedExpenses = ({ accountSlug }: DashboardSectionProps) => {
154148
title={<FormattedMessage defaultMessage="Received Expenses" id="1c0Y31" />}
155149
description={<FormattedMessage defaultMessage="Expenses submitted to your account." id="0I3Lbj" />}
156150
actions={
157-
hasNewSubmitExpenseFlow ? (
158-
<Button onClick={() => setIsExpenseFlowOpen(true)} size="sm" className="gap-1">
159-
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
160-
</Button>
161-
) : null
151+
<Button onClick={() => setIsExpenseFlowOpen(true)} size="sm" className="gap-1">
152+
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
153+
</Button>
162154
}
163155
/>
164156
{isSelfHosted && (

components/dashboard/sections/expenses/SubmittedExpenses.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { FormattedMessage } from 'react-intl';
66

77
import useLoggedInUser from '../../../../lib/hooks/useLoggedInUser';
88
import useQueryFilter from '../../../../lib/hooks/useQueryFilter';
9-
import { PREVIEW_FEATURE_KEYS } from '../../../../lib/preview-features';
109
import type { Currency } from '@/lib/graphql/types/v2/graphql';
1110
import { ExpenseType } from '@/lib/graphql/types/v2/graphql';
1211

@@ -67,9 +66,6 @@ const SubmittedExpenses = ({ accountSlug }: DashboardSectionProps) => {
6766
accountingCategoryKinds: ExpenseAccountingCategoryKinds,
6867
};
6968

70-
const hasNewSubmitExpenseFlow =
71-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) || router.query.newExpenseFlowEnabled;
72-
7369
const pageRoute = `/dashboard/${accountSlug}/submitted-expenses`;
7470

7571
return (
@@ -81,18 +77,16 @@ const SubmittedExpenses = ({ accountSlug }: DashboardSectionProps) => {
8177
<FormattedMessage defaultMessage="Expenses that you have submitted to other accounts." id="aKfm6V" />
8278
}
8379
actions={
84-
hasNewSubmitExpenseFlow ? (
85-
<Button
86-
onClick={() => {
87-
setDuplicateExpenseId(null);
88-
setIsExpenseFlowOpen(true);
89-
}}
90-
size="sm"
91-
className="gap-1"
92-
>
93-
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
94-
</Button>
95-
) : null
80+
<Button
81+
onClick={() => {
82+
setDuplicateExpenseId(null);
83+
setIsExpenseFlowOpen(true);
84+
}}
85+
size="sm"
86+
className="gap-1"
87+
>
88+
<FormattedMessage defaultMessage="New expense" id="pNn/g+" />
89+
</Button>
9690
}
9791
/>
9892
<Filterbar {...queryFilter} meta={filterMeta} />

components/dashboard/sections/expenses/actions.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ import { ExpenseStatus } from '../../../../lib/graphql/types/v2/graphql';
3131
import { useAsyncCall } from '../../../../lib/hooks/useAsyncCall';
3232
import useClipboard from '../../../../lib/hooks/useClipboard';
3333
import useLoggedInUser from '../../../../lib/hooks/useLoggedInUser';
34-
import { PREVIEW_FEATURE_KEYS } from '../../../../lib/preview-features';
3534
import { getCollectivePageCanonicalURL, getDashboardRoute } from '../../../../lib/url-helpers';
3635
import { collectiveAdminsMustConfirmAccountingCategory } from '@/components/expenses/lib/accounting-categories';
3736
import type LoggedInUser from '@/lib/LoggedInUser';
37+
import { PREVIEW_FEATURE_KEYS } from '@/lib/preview-features';
3838

3939
import { shouldShowDuplicateExpenseButton } from '@/components/expenses/ExpenseMoreActionsButton';
4040
import { getDisabledMessage } from '@/components/expenses/PayExpenseButton';
@@ -427,11 +427,7 @@ export function useExpenseActions<T extends ExpenseQueryNode>({
427427
}
428428
};
429429

430-
// Check if the new expense flow is enabled (via preview feature or query param)
431-
const hasNewSubmitExpenseFlow =
432-
LoggedInUser?.hasPreviewFeatureEnabled(PREVIEW_FEATURE_KEYS.NEW_EXPENSE_FLOW) ||
433-
router.query.newExpenseFlowEnabled;
434-
const canDuplicateExpense = hasNewSubmitExpenseFlow && shouldShowDuplicateExpenseButton(LoggedInUser, expense);
430+
const canDuplicateExpense = shouldShowDuplicateExpenseButton(LoggedInUser, expense);
435431

436432
return {
437433
primary: compact([

components/expenses/CreateExpenseDismissibleIntro.js

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)