{"version":3,"file":"utils-D5nH9c3f.js","sources":["../../../app/javascript/dashboards/components/fundraising/constants.ts","../../../app/javascript/dashboards/components/fundraising/formatters.tsx","../../../app/javascript/dashboards/components/fundraising/utils.ts"],"sourcesContent":["import { getOptionsFromArray, getOptionsNameMap } from '../../helpers/utils';\nimport paths from '../../paths';\nimport { canShowRuv } from './utils';\n\nexport const FINANCING_TYPE_OPTIONS = [\n {\n label: 'Equity Round',\n value: 'equity_financing',\n },\n {\n label: 'SAFE Round',\n value: 'safe_financing',\n },\n {\n label: 'Convertible Note',\n value: 'debt_financing',\n },\n];\n\nexport const FINANCING_TYPE_MAP = getOptionsNameMap(FINANCING_TYPE_OPTIONS);\n\nexport const INVESTMENT_TEMPLATE_OPTIONS = [\n {\n label: 'Valuation Cap',\n value: 'val_cap',\n },\n {\n label: 'Discount',\n value: 'discount',\n },\n {\n label: 'Valuation Cap + Discount',\n value: 'val_cap_discount',\n },\n {\n label: 'MFN',\n value: 'mfn',\n },\n];\n\nexport const INVESTMENT_TEMPLATE_MAP = getOptionsNameMap(\n INVESTMENT_TEMPLATE_OPTIONS,\n);\n\nexport const MAIN_STAGES = [\n {\n label: 'Angel round',\n value: 'Angel Round',\n },\n {\n label: 'Pre-Seed',\n value: 'Preseed',\n },\n {\n label: 'Seed',\n value: 'Seed',\n },\n {\n label: 'Series A',\n value: 'Series A',\n },\n {\n label: 'Other',\n value: 'Other',\n },\n];\n\nexport const ENTITY_TYPE_OPTIONS = [\n {\n label: 'C Corporation',\n value: 'Corporation',\n },\n {\n label: 'LLC',\n value: 'LLC',\n },\n {\n label: 'PBC',\n value: 'PBC',\n },\n {\n label: 'Other',\n value: 'Other',\n },\n];\n\nexport const ROUND_TYPES = {\n DIRECT: 'financing_round',\n RUV: 'ruv',\n DIRECT_AND_RUV: 'financing_round_with_ruv',\n};\n\nexport const COMPANY_INDUSTRY_OPTIONS = [\n { label: 'AI / ML', value: 'AI / ML' },\n { label: 'Adtech', value: 'Adtech' },\n { label: 'Aerospace', value: 'Aerospace' },\n { label: 'Analytics', value: 'Analytics' },\n { label: 'Biotech', value: 'Biotech' },\n { label: 'Blockchain / Crypto', value: 'Blockchain / Crypto' },\n { label: 'Cannabis', value: 'Cannabis' },\n { label: 'Cleantech', value: 'Cleantech' },\n { label: 'Collaboration Tools', value: 'Collaboration Tools' },\n { label: 'Consumer', value: 'Consumer' },\n { label: 'Consumer Product', value: 'Consumer Product' },\n { label: 'Dating', value: 'Dating' },\n { label: 'Developer Tools', value: 'Developer Tools' },\n { label: 'Drones', value: 'Drones' },\n { label: 'E-Commerce', value: 'E-Commerce' },\n { label: 'Education', value: 'Education' },\n { label: 'Enterprise', value: 'Enterprise' },\n { label: 'Finance', value: 'Finance' },\n { label: 'Fitness', value: 'Fitness' },\n { label: 'Food / Beverages', value: 'Food / Beverages' },\n { label: 'Gaming', value: 'Gaming' },\n { label: 'HR & Recruiting', value: 'HR & Recruiting' },\n { label: 'Hardware', value: 'Hardware' },\n { label: 'Health', value: 'Health' },\n { label: 'Healthcare', value: 'Healthcare' },\n { label: 'Home Services', value: 'Home Services' },\n { label: 'Insurance', value: 'Insurance' },\n { label: 'Internet of Things', value: 'Internet of Things' },\n { label: 'Investment Platforms', value: 'Investment Platforms' },\n { label: 'Logistics', value: 'Logistics' },\n { label: 'Media / Entertainment', value: 'Media / Entertainment' },\n { label: 'Medical Devices', value: 'Medical Devices' },\n { label: 'Non Tech', value: 'Non Tech' },\n { label: 'On Demand', value: 'On Demand' },\n { label: 'Payments', value: 'Payments' },\n { label: 'Productivity', value: 'Productivity' },\n { label: 'Real Estate', value: 'Real Estate' },\n { label: 'Retail', value: 'Retail' },\n { label: 'Robotics', value: 'Robotics' },\n { label: 'SaaS', value: 'SaaS' },\n { label: 'Sales Tools', value: 'Sales Tools' },\n { label: 'Security', value: 'Security' },\n { label: 'Social', value: 'Social' },\n { label: 'Social Impact', value: 'Social Impact' },\n { label: 'Transportation', value: 'Transportation' },\n { label: 'Travel', value: 'Travel' },\n { label: 'VR / AR', value: 'VR / AR' },\n { label: 'Other', value: 'Other' },\n];\n\nexport const ROUND_TYPE_OPTIONS = [\n {\n label: 'Direct investments',\n description:\n 'Invite investors to sign SAFE, Convertible Note, or Equity documents directly.',\n value: ROUND_TYPES.DIRECT,\n icon: 'privateRounds',\n isDisabled: false,\n },\n {\n label: 'Roll Up Vehicle™',\n description:\n 'Raise big and small checks from up to 250 investors in a single line on your cap table. Included in select plans, available as an add-on.',\n value: ROUND_TYPES.RUV,\n icon: 'ruvs',\n isDisabled: false,\n },\n {\n label: 'Direct Investment + Roll Up Vehicle',\n description:\n 'Raise money directly and via an RUV with the same terms. Choose how to invite each investor.',\n value: ROUND_TYPES.DIRECT_AND_RUV,\n icon: 'publicRounds',\n isDisabled: false,\n },\n];\n\nexport const STAGE_LIST = [\n 'Angel Round',\n 'Preseed',\n 'Seed',\n 'Seed+',\n 'Series A',\n 'Series A+',\n 'Series B',\n 'Series B+',\n 'Series C',\n 'Series C+',\n 'Series D',\n 'Series E',\n 'Series F',\n 'Other',\n];\n\nexport const STAGE_OPTIONS = getOptionsFromArray(STAGE_LIST);\n\nexport const SAFE_TYPE_OPTIONS = [\n {\n value: 'pre_money',\n label: 'Pre-money SAFE',\n },\n {\n value: 'post_money',\n label: 'Post-money SAFE',\n },\n];\n\nexport const SAFE_TYPE_MAP = getOptionsNameMap(SAFE_TYPE_OPTIONS);\n\nexport const INSTRUMENT_TYPE = {\n SAFE: 'safe',\n EQUITY: 'equity',\n WARRANT: 'warrant',\n NOTE: 'note',\n OTHER: 'other',\n EMERGENCY_ROUND: 'emergency_round',\n};\n\nexport const INSTRUMENT_TYPE_OPTIONS = [\n {\n label: 'SAFE',\n value: INSTRUMENT_TYPE.SAFE,\n },\n {\n label: 'Equity',\n value: INSTRUMENT_TYPE.EQUITY,\n },\n {\n label: 'Warrant',\n value: INSTRUMENT_TYPE.WARRANT,\n },\n {\n label: 'Note',\n value: INSTRUMENT_TYPE.NOTE,\n },\n {\n label: 'Other',\n value: INSTRUMENT_TYPE.OTHER,\n },\n {\n label: 'Emergency Round',\n value: INSTRUMENT_TYPE.EMERGENCY_ROUND,\n },\n];\n\nexport const INSTRUMENT_TYPE_MAP = getOptionsNameMap(INSTRUMENT_TYPE_OPTIONS);\n\nexport const VALUATION_TYPE_OPTIONS = [\n { value: 'pre_money', label: 'Pre-money' },\n { value: 'post_money', label: 'Post-money' },\n];\n\nexport const VALUATION_TYPE_MAP = getOptionsNameMap(VALUATION_TYPE_OPTIONS);\n\nexport const VENTURE_VALUATION_TYPE_MAP: { [key: string]: string } = {\n pre: 'Pre-money',\n post: 'Post-money',\n};\n\nexport const INSTRUMENT_OPTIONS = [\n { label: 'SAFE', value: INSTRUMENT_TYPE.SAFE },\n];\n\nexport const VALUATION_CAP_OPTIONS = [\n { label: 'Capped', value: 'capped' },\n { label: 'Uncapped', value: 'uncapped' },\n];\n\nexport const SHARE_CLASS_OPTIONS = [\n { label: 'Common', value: 'common' },\n { label: 'Preferred', value: 'preferred' },\n];\n\nexport const DEFAULT_TAB = 'investors';\n\nexport const getTabItems = (\n instrumentType: string,\n alRuvId: string,\n allowDirectInvestment: boolean,\n) => {\n const items = [\n {\n id: 'investors',\n label: 'Investors',\n },\n ];\n\n if (canShowRuv(instrumentType, alRuvId) && allowDirectInvestment) {\n items.push({ id: 'details', label: 'Direct Details' });\n items.push({\n id: ROUND_TYPES.RUV,\n label: 'RUV Details',\n });\n } else if (allowDirectInvestment) {\n items.push({\n id: 'details',\n label: 'Details',\n });\n } else if (canShowRuv(instrumentType, alRuvId)) {\n items.push({\n id: ROUND_TYPES.RUV,\n label: 'RUV Details',\n });\n }\n\n if (instrumentType === INSTRUMENT_TYPE.EQUITY && allowDirectInvestment) {\n items.push(\n {\n id: 'documents',\n label: 'Documents',\n },\n {\n id: 'conversion',\n label: 'Existing SAFE/Note Holders',\n },\n );\n }\n\n items.push({\n id: 'activity',\n label: 'Activity',\n });\n\n return items;\n};\n\nexport const COMMIT_STATUS = {\n INVITED: 'no_action',\n CREATED: 'created',\n VIEWED: 'viewed',\n CANCELED: 'canceled',\n COMMITTED: 'committed',\n SIGNED: 'signed',\n EXECUTED: 'executed',\n FUND_RECIEVED: 'fund_recieved',\n};\n\nexport const INVESTOR_SOURCE = {\n DIRECT: 'direct',\n RUV: 'ruv',\n};\n\nexport const SOURCE_FILTER_ITEMS = [\n {\n key: 'all',\n value: 'all',\n label: 'All',\n },\n {\n key: INVESTOR_SOURCE.DIRECT,\n value: INVESTOR_SOURCE.DIRECT,\n label: 'Direct',\n },\n {\n key: INVESTOR_SOURCE.RUV,\n value: INVESTOR_SOURCE.RUV,\n label: 'RUV',\n },\n];\n\nexport const COMMITMENT_STATUS_FILTER_ITEMS = [\n {\n key: COMMIT_STATUS.INVITED,\n value: COMMIT_STATUS.INVITED,\n label: 'Invited',\n },\n {\n key: COMMIT_STATUS.VIEWED,\n value: COMMIT_STATUS.VIEWED,\n label: 'Viewed',\n },\n {\n key: COMMIT_STATUS.CREATED,\n value: COMMIT_STATUS.CREATED,\n label: 'Created',\n },\n {\n key: COMMIT_STATUS.CANCELED,\n value: COMMIT_STATUS.CANCELED,\n label: 'Canceled',\n },\n {\n key: COMMIT_STATUS.COMMITTED,\n value: COMMIT_STATUS.COMMITTED,\n label: 'Committed',\n },\n {\n key: COMMIT_STATUS.SIGNED,\n value: COMMIT_STATUS.SIGNED,\n label: 'Signed',\n },\n {\n key: COMMIT_STATUS.EXECUTED,\n value: COMMIT_STATUS.EXECUTED,\n label: 'Executed',\n },\n {\n key: COMMIT_STATUS.FUND_RECIEVED,\n value: COMMIT_STATUS.FUND_RECIEVED,\n label: 'Funds Received',\n },\n];\n\nexport const CONVERSION_FILTER_ITEMS = [\n {\n key: 'all',\n value: 'all',\n label: 'All',\n },\n {\n key: COMMIT_STATUS.CREATED,\n value: COMMIT_STATUS.CREATED,\n label: 'Created',\n },\n {\n key: COMMIT_STATUS.EXECUTED,\n value: COMMIT_STATUS.EXECUTED,\n label: 'Signed / Executed',\n },\n];\n\nexport const ROUND_STATUS = {\n CREATED: 'created',\n CLOSED: 'closed',\n};\n\nexport const ROUND_FILTER_ITEMS = [\n {\n value: 'all',\n key: 'all',\n label: 'All',\n },\n {\n key: ROUND_STATUS.CREATED,\n value: ROUND_STATUS.CREATED,\n label: 'Raising',\n },\n {\n key: ROUND_STATUS.CLOSED,\n value: ROUND_STATUS.CLOSED,\n label: 'Closed',\n },\n];\n\nexport const ACTION_FILTER_ITEMS = [\n {\n key: 'Raise View',\n label: 'Raise View',\n value: 'Raise View',\n },\n {\n key: 'Interest Submit',\n label: 'Interest Submission',\n value: 'Interest Submit',\n },\n {\n key: 'E-Sign View',\n label: 'E-Sign View',\n value: 'E-Sign View',\n },\n {\n key: 'E-Sign Submit',\n label: 'E-Sign Submission',\n value: 'E-Sign Submit',\n },\n {\n key: 'Wire Info View',\n label: 'Wire Info View',\n value: 'Wire Info View',\n },\n];\n\nexport const NULL_SAFE_TEMPLATE_DOCUMENT_ID = 'zzz';\n\nexport const roundBreadcrumbs = [\n {\n title: 'Rounds',\n link: paths.raise.rounds,\n },\n];\n\nexport const RUV_STATUSES = {\n RAISING: 'Raising',\n IN_REVIEW: 'In review',\n CLOSING: 'Closing',\n WIRED: 'Wired',\n CANCELLED: 'Cancelled',\n};\n\nexport const OVERVIEW_GRID_ITEMS = [\n {\n title: 'SAFEs',\n subtitle: 'Raise money quickly with simple terms.',\n icon: 'signed',\n },\n {\n title: 'Equity Rounds',\n subtitle: 'Invite investors and collect signed docs.',\n icon: 'pricedRound',\n },\n {\n title: 'Roll Up Vehicles™',\n subtitle: 'Raise small checks from your network.',\n icon: 'ruvs',\n },\n];\n","import React from 'react';\nimport { Avatar, Box, Icon, Stack, Text, Tooltip } from '@angellist/adapt';\n\nimport {\n commitmentStatusFormatter,\n getCommitmentInvestorName,\n ruvStatusFormatter,\n} from './utils';\nimport { FinancingCommitment, RuvInvestor } from '../../../graphql';\nimport { INSTRUMENT_TYPE, INVESTOR_SOURCE } from './constants';\nimport { CommitmentType } from './types';\nimport { pendingStatusFormatter } from '../../helpers/formatters';\n\nexport const investorNameFormatter = (\n _: any,\n commitment: FinancingCommitment,\n) => {\n const investorName = getCommitmentInvestorName(commitment);\n const avatarShape =\n commitment.investmentEntity?.name === 'individual' ? 'circle' : 'square';\n const entityName = commitment?.entityName;\n\n return (\n \n \n \n \n {investorName}\n \n {entityName && (\n \n {entityName}\n \n )}\n \n \n );\n};\n\nexport const conversionInvestorNameFormatter = (\n _: any,\n commitment: FinancingCommitment,\n) => {\n const investorName = getCommitmentInvestorName(commitment);\n const avatarShape =\n commitment.investmentEntity?.name === 'individual' ? 'circle' : 'square';\n\n return (\n \n \n \n {investorName}\n \n \n );\n};\n\nexport const sourceFormatter = (source: string) => {\n let icon = 'certificate';\n let title = 'Direct';\n if (source === INVESTOR_SOURCE.RUV) {\n icon = 'ruvs';\n title = 'RUV';\n }\n return (\n \n \n {title}\n \n );\n};\n\nexport const signedSubStatusFormatter = (\n signedSubStatus: string | null,\n tooltipContent: string | null,\n status: string,\n isLoading: boolean,\n) =>\n isLoading ? (\n pendingStatusFormatter(signedSubStatus, status, signedSubStatus, isLoading)\n ) : (\n {tooltipContent}}>\n {pendingStatusFormatter(\n signedSubStatus,\n status,\n signedSubStatus,\n isLoading,\n )}\n \n );\n\nexport const stateFormatter = (\n state: string,\n commitment: CommitmentType,\n instrumentType?: string,\n equityDocsCollected?: boolean,\n) => {\n if (commitment.source === INVESTOR_SOURCE.RUV) {\n const { subStatus } = commitment as RuvInvestor;\n return ruvStatusFormatter({\n status: state,\n subStatus,\n ...commitment?.pendingInvestorState,\n });\n }\n\n if (instrumentType === INSTRUMENT_TYPE.EQUITY) {\n return commitmentStatusFormatter(\n state,\n INSTRUMENT_TYPE.EQUITY,\n equityDocsCollected,\n );\n }\n return commitmentStatusFormatter(state);\n};\n","import {\n FinancingCommitment,\n FinancingRoundAttributes,\n FinancingCommitmentAttributes,\n InvestmentTermAttributes,\n FinancingRound,\n Ruv,\n RuvSummary,\n RuvInvestor,\n OfflineCommitmentAttributes,\n} from '../../../graphql';\nimport {\n boolFormatter,\n directAndRuvStatusTags,\n statusFormatter,\n} from '../../helpers/formatters';\nimport {\n formatCentsToDollars,\n formatDate,\n formatMoneyAbbreviated,\n formatTitle,\n formatToCents,\n} from '../../helpers/utils';\nimport { processAdaptRowItems } from '../common/AdaptRowItem';\nimport {\n COMMIT_STATUS,\n INSTRUMENT_TYPE,\n INVESTOR_SOURCE,\n ROUND_STATUS,\n ROUND_TYPE_OPTIONS,\n ROUND_TYPES,\n RUV_STATUSES,\n} from './constants';\nimport { CommitmentType } from './types';\nimport { signedSubStatusFormatter } from './formatters';\n\nexport const formatRoundAttrs = (\n attrs: FinancingRoundAttributes & { customStageName?: string },\n) => {\n const {\n customStageName,\n stageName,\n minimumCommitSizeCents,\n ...restAttrs\n } = attrs;\n\n return {\n ...restAttrs,\n stageName: stageName === 'Other' ? customStageName : stageName,\n minimumCommitSizeCents: formatToCents(minimumCommitSizeCents),\n };\n};\n\nexport const formatInvestmentTermAttrs = (attrs: InvestmentTermAttributes) => ({\n ...attrs,\n investmentAmountCents: formatToCents(attrs.investmentAmountCents),\n valuationCents: formatToCents(attrs.valuationCents),\n discountPercent: Number(attrs.discountPercent),\n interestRate: Number(attrs.interestRate),\n hasMfn: attrs.docTemplateType === 'mfn',\n});\n\nexport const formatCommitmentAttrs = (\n attrs: FinancingCommitmentAttributes | OfflineCommitmentAttributes,\n) => ({\n ...attrs,\n commitmentAmountCents: formatToCents(attrs.commitmentAmountCents),\n});\n\nexport const getCommitmentInvestorName = (commitment: FinancingCommitment) => {\n if (commitment) {\n const investorName =\n commitment.investmentEntity?.name ||\n commitment.investorSignatureBlock?.investorName;\n\n return (\n investorName ||\n commitment.entityName ||\n commitment.user?.name ||\n '[Unsigned]'\n );\n }\n\n return '[Entity Name TBD]';\n};\n\nexport const RUV_STATUS_MAP: { [key: string]: string } = {\n no_action: 'Invited',\n viewed: 'Viewed',\n passed: 'Passed',\n signed: 'Signed',\n completed: 'Funds Received',\n canceled: 'Canceled',\n};\n\nexport const RUV_STATUS_FILTER_MAP: { [key: string]: string } = {\n no_action: 'no_action',\n canceled: 'canceled',\n viewed: 'viewed',\n signed: 'signed',\n completed: 'fund_recieved',\n};\n\nconst RUV_SUB_STATUS_MAP: { [key: string]: string } = {\n 1: 'Pending KYC',\n 2: 'Awaiting Funds',\n 3: 'Awaiting Funds',\n 4: 'Awaiting Funds',\n 5: 'Awaiting Funds',\n};\n\nconst SIGNED_SUB_STATUS_TOOLTIP_MAP = (\n lastReminderSentAt?: string,\n initiatedAt?: string,\n failedAt?: string,\n): { [key: string]: string } => ({\n 'Wire Pending': lastReminderSentAt\n ? `AngelList has not received a wire and last reminded the investor on ${formatDate(\n lastReminderSentAt,\n '-',\n )}. Wires are assigned 24 hours after they are received.`\n : 'AngelList has not received a wire. Wires are assigned 24 hours after they are received.',\n 'ACH Pending': 'The investor has not initiated the ACH.',\n 'ACH in Transit': initiatedAt\n ? `The investor has initiated the ACH on ${formatDate(\n initiatedAt,\n '-',\n )} and the funds should land in 3-4 business days.`\n : 'The investor has initiated the ACH on AngelList and the funds should land in 3-4 business days.',\n 'ACH Under Compliance Review':\n 'Additional information required from the investor. This may take 1-2 business days to process once submitted.',\n 'ACH Failed': failedAt\n ? `The ACH failed on ${formatDate(\n failedAt,\n '-',\n )}. The investor can initiate a new ACH from their dashboard.`\n : 'The ACH failed. The investor can initiate a new ACH from their dashboard.',\n 'USDC Pending': 'The investor has not initiated the USDC transfer.',\n 'USDC in Transit': initiatedAt\n ? `The investor has initiated the USDC transfer on ${formatDate(\n initiatedAt,\n '-',\n )}.`\n : 'The investor has initiated the USDC transfer on AngelList.',\n});\n\nconst SIGNED_SUB_STATUS_LOADING: { [key: string]: string } = {\n 2: 'Wire',\n 3: 'ACH',\n 4: 'USDC',\n 5: 'Awaiting Funds',\n};\n\nexport const ruvStatusFormatter = (params: {\n status: string;\n subStatus: string;\n signedSubStatus?: string;\n lastReminderSentAt?: string;\n initiatedAt?: string;\n failedAt?: string;\n isLoading?: boolean;\n}) => {\n const {\n status,\n subStatus,\n signedSubStatus,\n lastReminderSentAt,\n initiatedAt,\n failedAt,\n isLoading,\n } = params;\n if (status === 'signed') {\n if (subStatus === '1' || (!signedSubStatus && !isLoading)) {\n return statusFormatter(\n RUV_SUB_STATUS_MAP[subStatus],\n 'info',\n RUV_SUB_STATUS_MAP[subStatus],\n );\n }\n const statusText = isLoading\n ? SIGNED_SUB_STATUS_LOADING[subStatus]\n : signedSubStatus;\n return signedSubStatusFormatter(\n statusText,\n SIGNED_SUB_STATUS_TOOLTIP_MAP(lastReminderSentAt, initiatedAt, failedAt)[\n statusText\n ] || '',\n statusText === 'ACH Failed' ? 'danger' : 'info',\n isLoading,\n );\n }\n return statusFormatter(\n RUV_STATUS_MAP[status]?.replace(' ', '_'),\n null,\n RUV_STATUS_MAP[status],\n );\n};\n\nexport const ruvStatusValue = (status: string, subStatus: string) => {\n if (status === 'signed') {\n return RUV_SUB_STATUS_MAP[subStatus];\n }\n return RUV_STATUS_MAP[status];\n};\n\nexport const completedSteps = (ruvDetails: Ruv, details: FinancingRound) => {\n if (!details || !ruvDetails)\n return {\n bankInformation: false,\n confirmInvestments: false,\n equityAllocation: false,\n investmentDocs: false,\n payment: false,\n };\n\n const hasFundsCollected = ruvDetails.investors?.every(\n (investor) => investor.status !== 'signed',\n );\n return {\n bankInformation:\n !!ruvDetails.wireDetails &&\n !!details.ruvClosingStatus?.wireDetailsProvidedAt,\n confirmInvestments:\n (ruvDetails.status === 'Closing' || ruvDetails.status === 'Wired') &&\n (details.ruvClosingStatus?.allFundsCollectedAt || hasFundsCollected) &&\n !!details.ruvClosingStatus?.confirmedAmountRaisedAt,\n investmentDocs: !!details.ruvClosingStatus?.hasInvestmentDocs,\n payment: !!details.ruvClosingStatus?.confirmedTermsAt,\n };\n};\n\nexport const getOpenSteps = (\n hasCompleted: any,\n raisedAmountFractional: number,\n overrideMinRaised: boolean,\n) => ({\n bankInformation: !hasCompleted.bankInformation,\n confirmInvestments:\n hasCompleted.bankInformation && !hasCompleted.confirmInvestments,\n investmentDocs:\n hasCompleted.bankInformation &&\n hasCompleted.confirmInvestments &&\n !hasCompleted.investmentDocs,\n payment:\n hasCompleted.bankInformation &&\n hasCompleted.confirmInvestments &&\n hasCompleted.investmentDocs &&\n (raisedAmountFractional >= 40_000_00 || overrideMinRaised) &&\n !hasCompleted.payment,\n});\n\nexport const commitmentStatusValue = (\n status: string,\n instrumentType?: string,\n equityDocsCollected?: boolean,\n) => {\n if (instrumentType === INSTRUMENT_TYPE.EQUITY) {\n if (status === COMMIT_STATUS.COMMITTED && equityDocsCollected) {\n return 'awaiting signature';\n }\n if (status === COMMIT_STATUS.SIGNED) {\n return 'awaiting funds';\n }\n }\n if (status === COMMIT_STATUS.FUND_RECIEVED) {\n return 'Funds Received';\n }\n if (status === COMMIT_STATUS.SIGNED) {\n return 'requires company signature';\n }\n return status;\n};\n\nexport const investorStateValue = (\n state: string,\n commitment: CommitmentType,\n instrumentType?: string,\n equityDocsCollected?: boolean,\n) => {\n if (commitment.source === INVESTOR_SOURCE.RUV) {\n const { subStatus } = commitment as RuvInvestor;\n return ruvStatusValue(state, subStatus);\n }\n\n if (instrumentType === INSTRUMENT_TYPE.EQUITY) {\n return commitmentStatusValue(\n state,\n INSTRUMENT_TYPE.EQUITY,\n equityDocsCollected,\n );\n }\n return commitmentStatusValue(state);\n};\n\nexport const commitmentStatusFormatter = (\n status: string,\n instrumentType?: string,\n equityDocsCollected?: boolean,\n) => {\n if (instrumentType === INSTRUMENT_TYPE.EQUITY) {\n if (status === COMMIT_STATUS.COMMITTED && equityDocsCollected) {\n return statusFormatter('awaiting_signature');\n }\n if (status === COMMIT_STATUS.SIGNED) {\n return statusFormatter('awaiting_funds');\n }\n }\n if (status === COMMIT_STATUS.FUND_RECIEVED) {\n return statusFormatter('Funds Received');\n }\n if (status === COMMIT_STATUS.SIGNED) {\n return statusFormatter('requires_company_signature');\n }\n return statusFormatter(status);\n};\n\nexport const getRoundPercentage = (\n totalRaisedCents: number,\n totalCommitedCents: number,\n targetSizeCents: number,\n) => {\n const maxSize = targetSizeCents\n ? Math.max(targetSizeCents, totalCommitedCents)\n : totalCommitedCents;\n\n let totalRaisedPercentage = 0;\n if (maxSize && totalRaisedCents) {\n totalRaisedPercentage = Number(\n ((totalRaisedCents / maxSize) * 100).toFixed(2),\n );\n }\n let totalCommitedPercentage = 0;\n if (maxSize && totalCommitedCents) {\n totalCommitedPercentage = Number(\n ((totalCommitedCents / maxSize) * 100).toFixed(2),\n );\n }\n\n return {\n totalRaisedPercentage,\n totalCommitedPercentage,\n };\n};\n\nexport const getRoundStats = (\n financingRound: FinancingRound,\n ruvDetails: Ruv,\n commitments: FinancingCommitment[],\n) => {\n let totalCommitedCents = financingRound.totalCommited?.fractional || 0;\n let totalRaisedCents = financingRound.totalRaised?.fractional || 0;\n const targetSizeCents = financingRound?.targetRoundSize?.fractional || 0;\n const totalInvestorsList = [];\n if (commitments.length) {\n totalInvestorsList.push(`${commitments.length} direct`);\n }\n\n let directRaised = Number(financingRound.totalRaised?.dollars);\n let directCommitted = Number(financingRound.totalCommited?.dollars);\n\n const ruvRaised = Number(ruvDetails?.raised?.dollars || 0);\n const ruvCommitted = Number(ruvDetails?.committed?.dollars || 0);\n\n const ruvInvestorsWithFunds =\n ruvDetails?.investors?.filter(\n (investor) => investor.status === 'completed',\n ) || [];\n\n if (ruvDetails) {\n const closingCommit = commitments.find((c) => c.isRuvClosingCommitment);\n\n if (closingCommit) {\n if (closingCommit.state === COMMIT_STATUS.FUND_RECIEVED) {\n directCommitted -= Number(closingCommit.commitmentAmount.dollars);\n directRaised -= Number(closingCommit.commitmentAmount.dollars);\n } else {\n directCommitted -= Number(closingCommit.commitmentAmount.dollars);\n totalRaisedCents += closingCommit.commitmentAmount.fractional || 0;\n }\n } else {\n totalCommitedCents += ruvDetails.committed?.fractional || 0;\n totalRaisedCents += ruvDetails.raised?.fractional || 0;\n }\n\n const totalDirectInvestors = commitments.length; // for direct investors\n const totalRuvInvestorsWithFunds = ruvInvestorsWithFunds.length; // for ruv investors\n const totalInvestors = totalDirectInvestors + totalRuvInvestorsWithFunds; // total investors\n\n const {\n totalRaisedPercentage,\n totalCommitedPercentage,\n } = getRoundPercentage(\n totalRaisedCents,\n totalCommitedCents,\n targetSizeCents,\n );\n\n return {\n totalRaisedPercentage,\n totalCommitedPercentage,\n totalInvestors,\n targetSize: formatCentsToDollars(targetSizeCents),\n totalRaised: formatCentsToDollars(totalRaisedCents),\n totalCommited: formatCentsToDollars(totalCommitedCents),\n directRaised,\n directCommitted,\n ruvRaised,\n ruvCommitted,\n };\n }\n\n // This calculates the percentages of total funds raised and committed relative to the target round size\n const { totalRaisedPercentage, totalCommitedPercentage } = getRoundPercentage(\n totalRaisedCents,\n totalCommitedCents,\n targetSizeCents,\n );\n\n return {\n totalRaisedPercentage,\n totalCommitedPercentage,\n totalInvestors: commitments.length, // this one is for direct investors\n targetSize: formatCentsToDollars(targetSizeCents),\n totalRaised: formatCentsToDollars(totalRaisedCents),\n totalCommited: formatCentsToDollars(totalCommitedCents),\n directRaised,\n directCommitted,\n ruvRaised: 0,\n ruvCommitted: 0,\n };\n};\n\nexport const getTotalRowItems = (\n suffix: string,\n directValue: string,\n ruvValue?: string,\n loading?: boolean,\n) => {\n const items = [\n {\n label: `${suffix} directly`,\n suffixLabel: directValue,\n },\n ];\n if (ruvValue) {\n items.push({\n label: `${suffix} via RUV`,\n suffixLabel: ruvValue,\n });\n }\n return processAdaptRowItems(items, { compact: true, loading });\n};\n\nexport const getTransferDetailsRowItems = (\n wireInitiatedAt: string | null,\n paymentSentAt: string | null,\n loading?: boolean,\n) => {\n const items = [\n {\n label: 'Money raised',\n suffixLabel: wireInitiatedAt\n ? `Wire initiated ${formatDate(wireInitiatedAt)}`\n : 'No wire initiated',\n },\n {\n label: 'Payment',\n suffixLabel: paymentSentAt\n ? `ACH pulled ${formatDate(paymentSentAt)}`\n : 'No payment initiated',\n },\n ];\n return processAdaptRowItems(items, { compact: true, loading });\n};\n\nconst getTotalRuvValues = (ruvs: RuvSummary[]) => {\n let totalRuvRaisedCents = 0;\n let totalRuvCommitedCents = 0;\n let totalRuvInvestors = 0;\n\n ruvs.forEach((ruv) => {\n totalRuvCommitedCents += ruv.committed?.fractional || 0;\n totalRuvRaisedCents += ruv.raised?.fractional || 0;\n totalRuvInvestors += ruv.numInvestors || 0;\n });\n\n return { totalRuvCommitedCents, totalRuvRaisedCents, totalRuvInvestors };\n};\n\nconst getTotalDirectValue = (rounds: FinancingRound[]) => {\n let totalDirectCommitedCents = 0;\n let totalDirectRaisedCents = 0;\n let totalDirectInvestors = 0;\n\n rounds.forEach((financingRound) => {\n totalDirectCommitedCents += financingRound.totalCommited?.fractional || 0;\n totalDirectRaisedCents += financingRound.totalRaised?.fractional || 0;\n totalDirectInvestors += financingRound.totalInvestors || 0;\n\n const closingCommit = financingRound.ruvClosingCommitment;\n if (closingCommit) {\n if (closingCommit.state === COMMIT_STATUS.FUND_RECIEVED) {\n totalDirectRaisedCents -= closingCommit.commitmentAmount.fractional;\n totalDirectCommitedCents -= closingCommit.commitmentAmount.fractional;\n } else {\n totalDirectCommitedCents -= closingCommit.commitmentAmount.fractional;\n }\n }\n });\n\n return {\n totalDirectCommitedCents,\n totalDirectRaisedCents,\n totalDirectInvestors,\n };\n};\n\nexport const getAllRoundStats = (\n rounds: FinancingRound[],\n ruvsSummary: RuvSummary[],\n) => {\n const {\n totalDirectCommitedCents,\n totalDirectRaisedCents,\n totalDirectInvestors,\n } = getTotalDirectValue(rounds);\n const {\n totalRuvRaisedCents,\n totalRuvCommitedCents,\n totalRuvInvestors,\n } = getTotalRuvValues(ruvsSummary);\n\n const totalRaisedCents = totalDirectRaisedCents + totalRuvRaisedCents;\n const totalCommitedCents = totalDirectCommitedCents + totalRuvCommitedCents;\n\n return {\n totalDirectInvestors,\n totalRuvInvestors,\n totalRuvRaised: formatCentsToDollars(totalRuvRaisedCents),\n totalRuvCommited: formatCentsToDollars(totalRuvCommitedCents),\n totalDirectRaised: formatCentsToDollars(totalDirectRaisedCents),\n totalDirectCommited: formatCentsToDollars(totalDirectCommitedCents),\n totalRaised: formatCentsToDollars(totalRaisedCents),\n totalCommited: formatCentsToDollars(totalCommitedCents),\n };\n};\n\nexport const roundStatusFormatter = (status: string) => {\n if (status === 'created') {\n return statusFormatter('Raising', 'info');\n }\n if (status === 'closed') {\n return statusFormatter('Closed', 'success');\n }\n return statusFormatter(status);\n};\n\nconst configureStatusAndIntent = (status: string, isRuv: boolean) => {\n let roundStatus = status;\n let intent = null;\n\n if (isRuv) {\n if (status === RUV_STATUSES.IN_REVIEW || status === RUV_STATUSES.CLOSING) {\n intent = 'pending';\n } else if (status === RUV_STATUSES.RAISING) {\n intent = 'complete';\n } else if (status === RUV_STATUSES.WIRED) {\n intent = 'postComplete';\n } else if (status === RUV_STATUSES.CANCELLED) {\n intent = 'canceled';\n }\n } else if (status === ROUND_STATUS.CREATED) {\n roundStatus = 'Raising';\n intent = 'complete';\n } else if (status === ROUND_STATUS.CLOSED) {\n roundStatus = 'Closed';\n intent = 'postComplete';\n }\n\n return { roundStatus, intent };\n};\n\nexport const directAndRuvStatusFormatter = (\n ruvStatus: string,\n directStatus: string,\n) => {\n const {\n roundStatus: ruvRoundStatus,\n intent: ruvIntent,\n } = configureStatusAndIntent(ruvStatus, true);\n const {\n roundStatus: directRoundStatus,\n intent: directIntent,\n } = configureStatusAndIntent(directStatus, false);\n\n return directAndRuvStatusTags(\n ruvRoundStatus,\n directRoundStatus,\n ruvIntent,\n directIntent,\n );\n};\n\nexport const roundCsvFormatter = (status: string) => {\n if (status === 'created') {\n return 'Raising';\n }\n return formatTitle(status);\n};\n\nexport const isRaiseSignup = (\n genericDashboard: string,\n genericProducts: string[],\n) =>\n genericDashboard === 'fundraising' ||\n (genericDashboard === 'activate' && genericProducts.includes('fundraising'));\n\nexport const getRoundSeparatedListItems = (financingRound: FinancingRound) => {\n const items: string[] = [];\n\n const { investmentTerm } = financingRound;\n const { safeType, instrumentType, docTemplateType } = investmentTerm || {};\n\n const isSafe = instrumentType === INSTRUMENT_TYPE.SAFE;\n const isPreMoney = safeType === 'pre_money';\n const hasCap =\n docTemplateType === 'val_cap' || docTemplateType === 'val_cap_discount';\n const hasDiscount =\n docTemplateType === 'discount' || docTemplateType === 'val_cap_discount';\n\n if (isSafe) {\n if (hasCap && investmentTerm?.valuation) {\n const capValue = formatMoneyAbbreviated(\n investmentTerm?.valuation.dollars,\n investmentTerm?.valuation.currency,\n );\n items.push(`${capValue} valuation cap`);\n }\n if (hasDiscount) {\n if (investmentTerm?.discountPercent) {\n items.push(`${investmentTerm?.discountPercent}% discount`);\n } else {\n items.push('No discount');\n }\n }\n if (isPreMoney) {\n if (boolFormatter(investmentTerm?.includesProRata)) {\n items.push('Pro-rata');\n } else {\n items.push('No pro-rata');\n }\n }\n } else if (investmentTerm?.valuation) {\n const capValue = formatMoneyAbbreviated(\n investmentTerm?.valuation.dollars,\n investmentTerm?.valuation.currency,\n );\n items.push(`${capValue} valuation`);\n }\n\n return items;\n};\n\nexport const canShowRuv = (instrumentType: string, alRuvId: string) =>\n !!alRuvId &&\n [INSTRUMENT_TYPE.SAFE, INSTRUMENT_TYPE.EQUITY, INSTRUMENT_TYPE.NOTE].includes(\n instrumentType,\n );\n\nexport const canAddOfflineCommitment = (\n instrumentType: string,\n allowDirectInvestment: boolean,\n) =>\n (instrumentType === INSTRUMENT_TYPE.SAFE ||\n instrumentType === INSTRUMENT_TYPE.NOTE) &&\n allowDirectInvestment;\n\nexport const canAddEquityOfflineCommitment = (instrumentType: string) =>\n instrumentType === INSTRUMENT_TYPE.EQUITY;\n\nexport const getRoundTypeOptions = ({\n alRuvId,\n allowDirectInvestment,\n instrumentType,\n hasDirectCommitments,\n hasRuvCommitments,\n hasEquityRounds,\n}: {\n alRuvId: string;\n allowDirectInvestment: boolean;\n instrumentType: string;\n hasDirectCommitments: boolean;\n hasRuvCommitments: boolean;\n hasEquityRounds: boolean;\n}) => {\n // Clone and modify options based on certain conditions\n const options = ROUND_TYPE_OPTIONS.map((option) => {\n const isDirectOrCombined =\n option.value === ROUND_TYPES.DIRECT ||\n option.value === ROUND_TYPES.DIRECT_AND_RUV;\n\n if (\n alRuvId &&\n !allowDirectInvestment &&\n isDirectOrCombined &&\n ['equity', 'note'].includes(instrumentType) &&\n !hasEquityRounds\n ) {\n return { ...option, isDisabled: true };\n }\n\n return option;\n });\n\n // Filter options based on commitments\n if (!hasDirectCommitments && !hasRuvCommitments) {\n return options;\n }\n\n if (hasDirectCommitments && hasRuvCommitments) {\n return options.filter(\n (option) => option.value === ROUND_TYPES.DIRECT_AND_RUV,\n );\n }\n\n if (hasDirectCommitments) {\n return options.filter(\n (option) =>\n option.value === ROUND_TYPES.DIRECT ||\n option.value === ROUND_TYPES.DIRECT_AND_RUV,\n );\n }\n\n // If only RUV commitments exist\n return options.filter(\n (option) =>\n option.value === ROUND_TYPES.RUV ||\n option.value === ROUND_TYPES.DIRECT_AND_RUV,\n );\n};\n\nexport const MIN_VAUALTION = 100_000;\n\nexport const validateValuation = (value: any) => {\n // If is already a number, do nothing, else convert to number\n const numericValue =\n typeof value === 'number' ? value : Number(value.replace(/,/g, '')); // Remove commas and convert to a number\n return numericValue >= MIN_VAUALTION || 'Valuation must be at least $100,000';\n};\n"],"names":["FINANCING_TYPE_OPTIONS","FINANCING_TYPE_MAP","getOptionsNameMap","INVESTMENT_TEMPLATE_OPTIONS","MAIN_STAGES","ENTITY_TYPE_OPTIONS","ROUND_TYPES","COMPANY_INDUSTRY_OPTIONS","ROUND_TYPE_OPTIONS","STAGE_LIST","STAGE_OPTIONS","getOptionsFromArray","SAFE_TYPE_OPTIONS","SAFE_TYPE_MAP","INSTRUMENT_TYPE","INSTRUMENT_TYPE_OPTIONS","INSTRUMENT_TYPE_MAP","VALUATION_TYPE_OPTIONS","VALUATION_TYPE_MAP","VENTURE_VALUATION_TYPE_MAP","SHARE_CLASS_OPTIONS","getTabItems","instrumentType","alRuvId","allowDirectInvestment","items","canShowRuv","COMMIT_STATUS","INVESTOR_SOURCE","SOURCE_FILTER_ITEMS","COMMITMENT_STATUS_FILTER_ITEMS","CONVERSION_FILTER_ITEMS","ROUND_STATUS","ROUND_FILTER_ITEMS","ACTION_FILTER_ITEMS","NULL_SAFE_TEMPLATE_DOCUMENT_ID","roundBreadcrumbs","paths","RUV_STATUSES","investorNameFormatter","_","commitment","investorName","getCommitmentInvestorName","avatarShape","_a","entityName","Box","jsx","Avatar","jsxs","Stack","Text","conversionInvestorNameFormatter","sourceFormatter","source","icon","title","Icon","signedSubStatusFormatter","signedSubStatus","tooltipContent","status","isLoading","pendingStatusFormatter","Tooltip","stateFormatter","state","equityDocsCollected","subStatus","ruvStatusFormatter","commitmentStatusFormatter","formatRoundAttrs","attrs","customStageName","stageName","minimumCommitSizeCents","restAttrs","formatToCents","formatInvestmentTermAttrs","formatCommitmentAttrs","_b","_c","RUV_STATUS_MAP","RUV_STATUS_FILTER_MAP","RUV_SUB_STATUS_MAP","SIGNED_SUB_STATUS_TOOLTIP_MAP","lastReminderSentAt","initiatedAt","failedAt","formatDate","SIGNED_SUB_STATUS_LOADING","params","statusFormatter","statusText","ruvStatusValue","completedSteps","ruvDetails","details","hasFundsCollected","investor","_d","_e","_f","getOpenSteps","hasCompleted","raisedAmountFractional","overrideMinRaised","commitmentStatusValue","investorStateValue","getRoundPercentage","totalRaisedCents","totalCommitedCents","targetSizeCents","maxSize","totalRaisedPercentage","totalCommitedPercentage","getRoundStats","financingRound","commitments","totalInvestorsList","directRaised","directCommitted","ruvRaised","ruvCommitted","_g","ruvInvestorsWithFunds","_h","closingCommit","c","_i","_j","totalDirectInvestors","totalRuvInvestorsWithFunds","totalInvestors","formatCentsToDollars","getTotalRowItems","suffix","directValue","ruvValue","loading","processAdaptRowItems","getTransferDetailsRowItems","wireInitiatedAt","paymentSentAt","getTotalRuvValues","ruvs","totalRuvRaisedCents","totalRuvCommitedCents","totalRuvInvestors","ruv","getTotalDirectValue","rounds","totalDirectCommitedCents","totalDirectRaisedCents","getAllRoundStats","ruvsSummary","roundStatusFormatter","configureStatusAndIntent","isRuv","roundStatus","intent","directAndRuvStatusFormatter","ruvStatus","directStatus","ruvRoundStatus","ruvIntent","directRoundStatus","directIntent","directAndRuvStatusTags","roundCsvFormatter","formatTitle","isRaiseSignup","genericDashboard","genericProducts","getRoundSeparatedListItems","investmentTerm","safeType","docTemplateType","isSafe","isPreMoney","hasCap","hasDiscount","capValue","formatMoneyAbbreviated","boolFormatter","canAddOfflineCommitment","canAddEquityOfflineCommitment","getRoundTypeOptions","hasDirectCommitments","hasRuvCommitments","hasEquityRounds","options","option","isDirectOrCombined","MIN_VAUALTION","validateValuation","value"],"mappings":"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"}