{"version":3,"file":"static/js/6469.00a8ec0c.chunk.js","mappings":"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","sources":["ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/AppKeyDownloads.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/QuestionnaireDisclaimer.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/AppGalleryApiList.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/CategoryTags.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/EditTokensModal.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/FacilitatedAppAgreementButton.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/NominateButton.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/NotImplementingNowButtonWrapper.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/ShowroomRequestDownloadButton.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/ShowroomUpdateTokensButton.tsx","ao/components/Showroom/frameworkComponents/GalleryListingComponents/AppHelperComponents/StageBanner.tsx","ao/components/Showroom/frameworkComponents/GeneralComponents/ShowroomErrorAlert.tsx","../node_modules/@chakra-ui/icons/src/Question.tsx","../node_modules/@chakra-ui/switch/src/switch.tsx"],"sourcesContent":["/**\r\n * @copyright Copyright 2024 Epic Systems Corporation\r\n * @file app key download tags\r\n * @module Epic.AppOrchard.AppListing.ApiCollapse\r\n */\r\n\r\nimport { Tag } from \"@chakra-ui/react\";\r\nimport { ClientApplicationStatus, DownloadApprovedStatus } from \"ao/data/types\";\r\nimport React, { FunctionComponent, memo } from \"react\";\r\n\r\ninterface IProps {\r\n\tdownloadApprovedStatus: DownloadApprovedStatus;\r\n\tappStatus?: ClientApplicationStatus;\r\n\tisProdOnly?: boolean;\r\n}\r\n\r\nexport const AppKeyDownloads: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { downloadApprovedStatus, appStatus, isProdOnly } = props;\r\n\r\n\tlet label = \"\";\r\n\tlet color = \"\";\r\n\r\n\tswitch (downloadApprovedStatus) {\r\n\t\tcase DownloadApprovedStatus.Approved:\r\n\t\t\tlabel = isProdOnly\r\n\t\t\t\t? \"Client ID downloaded for Production\"\r\n\t\t\t\t: \"Client ID downloaded for all environments\";\r\n\t\t\tcolor = \"green\";\r\n\t\t\tbreak;\r\n\t\tcase DownloadApprovedStatus.NonProdOnly:\r\n\t\t\tlabel = \"Client ID downloaded for Non-Production\";\r\n\t\t\tcolor = \"blue\";\r\n\t\t\tbreak;\r\n\t\tcase DownloadApprovedStatus.Unapproved:\r\n\t\t\tlabel = \"Pending vendor approval\";\r\n\t\t\tcolor = \"gray\";\r\n\t\t\tbreak;\r\n\t\tcase DownloadApprovedStatus.Declined:\r\n\t\t\tlabel = \"Download request declined\";\r\n\t\t\tcolor = \"red\";\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (appStatus === ClientApplicationStatus.Inactive) {\r\n\t\tlabel = \"Inactive\";\r\n\t\tcolor = \"gray\";\r\n\t}\r\n\treturn (\r\n\t\t<Tag size=\"md\" variant=\"showroom\" colorScheme={color} textAlign=\"center\">\r\n\t\t\t{label}\r\n\t\t</Tag>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2025 Epic Systems Corporation\r\n * @file Disclaimer that shows above a questionnaire\r\n * @module Epic.AppOrchard.Showroom.QuestionnaireDisclaimer\r\n */\r\n\r\nimport { Text, TextProps } from \"@chakra-ui/react\";\r\nimport { AOTooltip } from \"ao/components/Core\";\r\nimport { QuestionnaireType } from \"ao/data\";\r\nimport { FunctionComponent, memo } from \"react\";\r\nimport { BsFillQuestionCircleFill } from \"react-icons/bs\";\r\n\r\ninterface IProps {\r\n\ttopLevelTierSingleName: string;\r\n\thideEndorsementWarning: boolean;\r\n\ttype: QuestionnaireType;\r\n}\r\n\r\ntype Props = IProps & TextProps;\r\n\r\nexport const QuestionnaireDisclaimer: FunctionComponent<Props> = memo((props) => {\r\n\tconst { topLevelTierSingleName, hideEndorsementWarning, type, ...rest } = props;\r\n\r\n\treturn (\r\n\t\t<Text color={rest.color || \"green.600\"} {...rest}>\r\n\t\t\t{type === QuestionnaireType.AppReadiness\r\n\t\t\t\t? \"This optional, vendor-completed questionnaire inquires about general safety, privacy, and security practices.\"\r\n\t\t\t\t: `This optional, vendor-completed questionnaire inquires about how this ${topLevelTierSingleName.toLocaleLowerCase()} handles patient data.`}\r\n\t\t\t{!hideEndorsementWarning && (\r\n\t\t\t\t<AOTooltip\r\n\t\t\t\t\tpl=\"0.25em\"\r\n\t\t\t\t\thelptext=\"The information in this questionnaire is provided by the vendor. Epic does not verify vendor responses.\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<BsFillQuestionCircleFill />\r\n\t\t\t\t</AOTooltip>\r\n\t\t\t)}\r\n\t\t</Text>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2024 Epic Systems Corporation\r\n * @file api collapse with links\r\n * @module Epic.AppOrchard.Showroom.ApiCollapse\r\n */\r\n\r\nimport { ChevronDownIcon, ChevronUpIcon, QuestionIcon } from \"@chakra-ui/icons\";\r\nimport {\r\n\tBox,\r\n\tButton,\r\n\tCenter,\r\n\tCollapse,\r\n\tFlex,\r\n\tSimpleGrid,\r\n\tuseBreakpointValue,\r\n\tuseDisclosure,\r\n} from \"@chakra-ui/react\";\r\nimport { AOLink, AOTooltip } from \"ao/components/Core\";\r\nimport { IGalleryApi } from \"ao/types/showroom\";\r\nimport React, { FunctionComponent, memo, ReactNode } from \"react\";\r\n\r\ninterface IProps {\r\n\tlabel: string;\r\n\tchildren: ReactNode;\r\n\ttextColor?: string;\r\n\tchildCount?: number;\r\n}\r\n\r\nexport const ApiCollapse: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { label, children, textColor, childCount } = props;\r\n\r\n\tconst { isOpen, onToggle } = useDisclosure({ defaultIsOpen: true });\r\n\r\n\tconst columnCount = useBreakpointValue({ base: 1, sm: 2, md: 3 }) || 3;\r\n\r\n\treturn (\r\n\t\t<Box>\r\n\t\t\t<Center width=\"100%\">\r\n\t\t\t\t<Button\r\n\t\t\t\t\tcolorScheme=\"black\"\r\n\t\t\t\t\tvariant=\"ghost\"\r\n\t\t\t\t\tonClick={onToggle}\r\n\t\t\t\t\tpadding=\"10px\"\r\n\t\t\t\t\tfontSize=\"1.3rem\"\r\n\t\t\t\t\tfontWeight=\"600\"\r\n\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\tcolor={textColor}\r\n\t\t\t\t>\r\n\t\t\t\t\t{label} {isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\r\n\t\t\t\t</Button>\r\n\t\t\t</Center>\r\n\t\t\t<Collapse\r\n\t\t\t\tin={isOpen}\r\n\t\t\t\tanimateOpacity\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\toverflow: \"visible\",\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<SimpleGrid columns={Math.min(columnCount, childCount ?? 3)} spacing={3} paddingTop=\"10px\">\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</SimpleGrid>\r\n\t\t\t</Collapse>\r\n\t\t</Box>\r\n\t);\r\n});\r\n\r\ninterface IApiLinkProps {\r\n\tapi: IGalleryApi;\r\n\tbaseUrl: string;\r\n\tcolor?: string;\r\n}\r\n\r\nexport const ApiLink: FunctionComponent<IApiLinkProps> = memo((props) => {\r\n\tconst { api, baseUrl, color } = props;\r\n\r\n\treturn (\r\n\t\t<Flex justify=\"center\">\r\n\t\t\t<AOLink\r\n\t\t\t\turl={`${baseUrl}sandbox?api=${api.id}`}\r\n\t\t\t\tdisplay=\"block\"\r\n\t\t\t\tisExternal\r\n\t\t\t\ttitle=\"View the specification\"\r\n\t\t\t\tcolor={color}\r\n\t\t\t>\r\n\t\t\t\t{api.name}\r\n\t\t\t</AOLink>\r\n\t\t\t{api.warning && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t \r\n\t\t\t\t\t<AOTooltip helptext={api.warning}>\r\n\t\t\t\t\t\t<QuestionIcon color=\"red.600\" boxProps={{ pb: \"6px\", marginLeft: \"5px\" }} />\r\n\t\t\t\t\t</AOTooltip>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</Flex>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2024 Epic Systems Corporation\r\n * @file Category tag display for the showroom listing page\r\n * @module Epic.AppOrchard.Showroom.DownloadInfoSection\r\n */\r\n\r\nimport { StarIcon } from \"@chakra-ui/icons\";\r\nimport { Tag, TagLabel, TagLeftIcon, Wrap } from \"@chakra-ui/react\";\r\nimport { getCategory } from \"ao/components/Showroom/Helper\";\r\nimport { ICategory } from \"ao/types/showroom\";\r\nimport React, { FunctionComponent, memo, useMemo } from \"react\";\r\n\r\ninterface IProps {\r\n\tcategoryIds: number[];\r\n\tcategories: ICategory[];\r\n\tprimaryCategoryId?: number;\r\n\tcolor?: string;\r\n}\r\n\r\nexport const CategoryTags: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { categoryIds, categories, primaryCategoryId, color } = props;\r\n\r\n\tconst nodes = useMemo(() => {\r\n\t\tlet sortedCategories = categoryIds.map((id) => getCategory(id, categories)).filter((x) => x !== null);\r\n\r\n\t\t//sport alphabetically with primary category in the beginning\r\n\t\tsortedCategories = sortedCategories.sort((a, b) =>\r\n\t\t\ta?.id === primaryCategoryId ? -1 : a!.name.localeCompare(b!.name),\r\n\t\t);\r\n\t\treturn sortedCategories;\r\n\t}, [categories, categoryIds, primaryCategoryId]);\r\n\r\n\tconst tagProps = color\r\n\t\t? { variant: \"unset\", color: color, border: `1px solid ${color}` }\r\n\t\t: { variant: \"subtle\", color: \"showroomPrimary\", border: `1px solid showroomPrimary` };\r\n\r\n\treturn (\r\n\t\t<Wrap spacing={2} marginY=\"7px\" justify={{ base: \"center\", lg: \"left\" }} pt=\"10px\">\r\n\t\t\t{nodes.map((node) => (\r\n\t\t\t\t<Tag size=\"md\" key={node!.id} borderRadius=\"full\" fontWeight=\"normal\" {...tagProps}>\r\n\t\t\t\t\t{primaryCategoryId !== undefined && primaryCategoryId === node?.id && (\r\n\t\t\t\t\t\t<TagLeftIcon boxSize=\"12px\" as={StarIcon} title=\"primary category\" />\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<TagLabel>{node!.name}</TagLabel>\r\n\t\t\t\t</Tag>\r\n\t\t\t))}\r\n\t\t</Wrap>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2024 Epic Systems Corporation\r\n * @file Modal for collecting download fields\r\n * @module Epic.AppOrchard.Core.TokenDownloadModal\r\n */\r\n\r\nimport {\r\n\tButton,\r\n\tDivider,\r\n\tFlex,\r\n\tFormControl,\r\n\tFormLabel,\r\n\tIcon,\r\n\tModal,\r\n\tModalBody,\r\n\tModalCloseButton,\r\n\tModalContent,\r\n\tModalFooter,\r\n\tModalHeader,\r\n\tModalOverlay,\r\n\tNumberInput,\r\n\tNumberInputField,\r\n\tSimpleGrid,\r\n\tSpacer,\r\n\tSwitch,\r\n\tText,\r\n} from \"@chakra-ui/react\";\r\nimport { AOTooltip, ErrorMessage } from \"ao/components/Core\";\r\nimport { ConsumerTypes } from \"ao/data\";\r\nimport { MaxIntValue } from \"ao/data/constants\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport React, { FC, memo, useEffect, useState } from \"react\";\r\nimport { BsFillQuestionCircleFill } from \"react-icons/bs\";\r\n\r\ninterface IProps {\r\n\tisOpen: boolean;\r\n\tonClose: () => void;\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\tsetAppDetails: (x: IShowroomAppDownloadModel) => void;\r\n\tonAccept: () => void;\r\n}\r\n\r\nexport const EditTokensModal: FC<IProps> = memo((props: IProps) => {\r\n\tconst { isOpen, onClose, appDetails, setAppDetails, onAccept } = props;\r\n\r\n\tconst appModel = appDetails.appModel;\r\n\r\n\tconst [shouldResetFields, setShouldResetFields] = useState<boolean>(true);\r\n\r\n\t/** resets fields whenever the modal is reopened */\r\n\tuseEffect(() => {\r\n\t\tif (isOpen && shouldResetFields) {\r\n\t\t\tsetAppDetails(resetTokensToDefault(appDetails));\r\n\t\t\tsetShouldResetFields(false);\r\n\t\t} else if (!isOpen) {\r\n\t\t\tsetShouldResetFields(true);\r\n\t\t}\r\n\t}, [appDetails, shouldResetFields, isOpen, setAppDetails]);\r\n\r\n\tconst error =\r\n\t\tappDetails.accessTokenValidity! < 1 ||\r\n\t\t(appModel.refreshTokensRequired && appDetails.refreshTokenValidity! < 1)\r\n\t\t\t? \"Enter a positive number for token validity to proceed.\"\r\n\t\t\t: \"\";\r\n\r\n\tconst frontendNoCredentials =\r\n\t\tappModel.consumerType !== ConsumerTypes.Backend && !appModel.isConfidentialClient;\r\n\tconst credentialsNonRefresh =\r\n\t\t(appModel.consumerType === ConsumerTypes.Backend || appModel.isConfidentialClient) &&\r\n\t\t!appModel.refreshTokensRequired;\r\n\r\n\tlet blurb = \"\";\r\n\r\n\tif (frontendNoCredentials) {\r\n\t\tif (appDetails.isDownloaded) {\r\n\t\t\tblurb =\r\n\t\t\t\t\"This app uses OAuth 2.0. You can override the app's access tokens validity duration by entering a new duration (in minutes). Once you click 'Update' the new token validity duration will be set for this client ID. Once set, newly issued tokens will respect these settings.\";\r\n\t\t} else {\r\n\t\t\tblurb = appModel.isEpicOnFhirApp\r\n\t\t\t\t? \"This app uses OAuth 2.0. You can override the duration that access tokens are valid for this app. Once you click the 'Download' the app's client IDs will be downloaded to your environment.\"\r\n\t\t\t\t: \"This app uses OAuth 2.0. You can override the duration that access tokens are valid for this app. Once you click the 'Request Client ID' button a request will be sent to the vendor to enable the app's client IDs for your system.\";\r\n\t\t}\r\n\t} else if (credentialsNonRefresh) {\r\n\t\tif (appDetails.isDownloaded) {\r\n\t\t\tblurb =\r\n\t\t\t\t\"This app uses OAuth 2.0. You can override the app's access tokens validity duration by entering a new duration (in minutes). Once you click 'Update' the new token validity duration will be set for this client ID. Once set, newly issued tokens will respect these settings.\";\r\n\t\t} else {\r\n\t\t\tblurb =\r\n\t\t\t\t\"This app uses OAuth 2.0. You can override the duration that access tokens are valid for this app. Once you click the 'Request Client ID' button a request will be sent to the vendor to enable the app's client IDs for your system.\";\r\n\t\t}\r\n\t} else if (appModel.refreshTokensRequired) {\r\n\t\tif (appDetails.isDownloaded) {\r\n\t\t\tblurb =\r\n\t\t\t\t\"This app uses OAuth 2.0 with refresh tokens. You can override the app's access tokens validity duration by entering a new duration (in minutes) and override the refresh token validity duration by entering a new duration (in days). Once you click 'Update' the new token validity duration will be set for this client ID. Once set the new tokens issued will respect these settings.\";\r\n\t\t} else {\r\n\t\t\tblurb =\r\n\t\t\t\t\"This app uses OAuth 2.0 with refresh tokens. You can override the duration that refresh and access tokens are valid for this app. Once you click the 'Request Client ID' button a request will be sent to the vendor to enable the app's client IDs for your system.\";\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t<Modal isOpen={isOpen} onClose={onClose} size=\"lg\" preserveScrollBarGap isCentered returnFocusOnClose>\r\n\t\t\t<ModalOverlay />\r\n\t\t\t<ModalContent>\r\n\t\t\t\t<ModalHeader>Token Validity</ModalHeader>\r\n\t\t\t\t<ModalCloseButton />\r\n\t\t\t\t<ModalBody>\r\n\t\t\t\t\t<SimpleGrid spacing={8}>\r\n\t\t\t\t\t\t<Text>{blurb}</Text>\r\n\r\n\t\t\t\t\t\t<FormControl isInvalid={appDetails.accessTokenValidity < 1}>\r\n\t\t\t\t\t\t\t<FormLabel>\r\n\t\t\t\t\t\t\t\tAccess token validity (minutes){\" \"}\r\n\t\t\t\t\t\t\t\t<AOTooltip helptext=\"Access tokens are obtained by an app as part of the OAuth 2.0 authentication process and allow apps to access information from your system for a defined period of time.\">\r\n\t\t\t\t\t\t\t\t\t<Icon as={BsFillQuestionCircleFill} boxSize={\"4\"} mb={\"1\"}></Icon>\r\n\t\t\t\t\t\t\t\t</AOTooltip>\r\n\t\t\t\t\t\t\t</FormLabel>\r\n\t\t\t\t\t\t\t<NumberInput\r\n\t\t\t\t\t\t\t\tmax={MaxIntValue}\r\n\t\t\t\t\t\t\t\tvalue={appDetails.accessTokenValidity}\r\n\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\tlet val = Number(e);\r\n\t\t\t\t\t\t\t\t\tif (!isNaN(val) && val <= MaxIntValue) {\r\n\t\t\t\t\t\t\t\t\t\tsetAppDetails({ ...appDetails, accessTokenValidity: val });\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<NumberInputField />\r\n\t\t\t\t\t\t\t</NumberInput>\r\n\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t{appModel.refreshTokensRequired && (\r\n\t\t\t\t\t\t\t<FormControl isInvalid={appDetails.refreshTokenValidity < 1}>\r\n\t\t\t\t\t\t\t\t<FormLabel>\r\n\t\t\t\t\t\t\t\t\tRefresh token validity (days){\" \"}\r\n\t\t\t\t\t\t\t\t\t<AOTooltip helptext=\"Refresh tokens are used to allow apps to continue to access information from your system for a defined period of time after the initial access token has expired without requiring a user or patient to authorize the app again. Refresh tokens are typically used for apps that are not embedded within Epic.\">\r\n\t\t\t\t\t\t\t\t\t\t<Icon as={BsFillQuestionCircleFill} boxSize={\"4\"} mb={\"1\"}></Icon>\r\n\t\t\t\t\t\t\t\t\t</AOTooltip>\r\n\t\t\t\t\t\t\t\t</FormLabel>\r\n\t\t\t\t\t\t\t\t<NumberInput\r\n\t\t\t\t\t\t\t\t\tmax={MaxIntValue}\r\n\t\t\t\t\t\t\t\t\tvalue={appDetails.refreshTokenValidity}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tlet val = Number(e);\r\n\t\t\t\t\t\t\t\t\t\tif (!isNaN(val) && val <= MaxIntValue) {\r\n\t\t\t\t\t\t\t\t\t\t\tsetAppDetails({ ...appDetails, refreshTokenValidity: val });\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<NumberInputField />\r\n\t\t\t\t\t\t\t\t</NumberInput>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{appModel.hasIndefiniteAccess && (\r\n\t\t\t\t\t\t\t<FormControl isRequired>\r\n\t\t\t\t\t\t\t\t<FormLabel>\r\n\t\t\t\t\t\t\t\t\tThis app is capable of obtaining indefinite access after initial authorization to data from your system using refresh tokens. You can\r\n\t\t\t\t\t\t\t\t\tenable or disable indefinite access for the app below.\r\n\t\t\t\t\t\t\t\t</FormLabel>\r\n\t\t\t\t\t\t\t\t<Switch\r\n\t\t\t\t\t\t\t\t\tisChecked={appDetails.disableIndefiniteAccess ?? false}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) =>\r\n\t\t\t\t\t\t\t\t\t\tsetAppDetails({\r\n\t\t\t\t\t\t\t\t\t\t\t...appDetails,\r\n\t\t\t\t\t\t\t\t\t\t\tdisableIndefiniteAccess: e.target.checked,\r\n\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tisFocusable\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tAllow indefinite access\r\n\t\t\t\t\t\t\t\t</Switch>\r\n\t\t\t\t\t\t\t</FormControl>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</SimpleGrid>\r\n\t\t\t\t</ModalBody>\r\n\t\t\t\t<Divider />\r\n\t\t\t\t<ModalFooter display=\"block\" pb=\"1em\" pt=\"1em\">\r\n\t\t\t\t\t<ErrorMessage message={error} isNotForm />\r\n\t\t\t\t\t<Flex my=\"3px\">\r\n\t\t\t\t\t\t<Spacer />\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tcolorScheme=\"blue\"\r\n\t\t\t\t\t\t\tonClick={onAccept}\r\n\t\t\t\t\t\t\tmr=\"2\"\r\n\t\t\t\t\t\t\tdisabled={!!error}\r\n\t\t\t\t\t\t\ttitle={\r\n\t\t\t\t\t\t\t\tappDetails.isDownloaded\r\n\t\t\t\t\t\t\t\t\t? \"Update\"\r\n\t\t\t\t\t\t\t\t\t: \"Enter positive numbers for token validity to proceed.\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{appDetails.isDownloaded ? \"Update\" : \"Request Client ID\"}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t<Button onClick={onClose}>Cancel</Button>\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t</ModalFooter>\r\n\t\t\t</ModalContent>\r\n\t\t</Modal>\r\n\t);\r\n});\r\n\r\nexport function setDefaultTokens(appDetails: IShowroomAppDownloadModel): IShowroomAppDownloadModel {\r\n\treturn {\r\n\t\t...appDetails,\r\n\t\tdefaultAccessTokenValidity: appDetails.accessTokenValidity,\r\n\t\tdefaultRefreshTokenValidity: appDetails.refreshTokenValidity,\r\n\t\tdefaultDisableIndefiniteAccess: appDetails.disableIndefiniteAccess ?? false,\r\n\t};\r\n}\r\n\r\nexport function resetTokensToDefault(appDetails: IShowroomAppDownloadModel): IShowroomAppDownloadModel {\r\n\tif (\r\n\t\tappDetails.defaultAccessTokenValidity === undefined &&\r\n\t\tappDetails.defaultRefreshTokenValidity === undefined &&\r\n\t\tappDetails.defaultDisableIndefiniteAccess === undefined\r\n\t) {\r\n\t\tappDetails = setDefaultTokens(appDetails);\r\n\t}\r\n\treturn {\r\n\t\t...appDetails,\r\n\t\taccessTokenValidity: appDetails.defaultAccessTokenValidity ?? appDetails.accessTokenValidity,\r\n\t\trefreshTokenValidity: appDetails.defaultRefreshTokenValidity ?? appDetails.refreshTokenValidity,\r\n\t\tdisableIndefiniteAccess:\r\n\t\t\tappDetails.defaultDisableIndefiniteAccess ?? appDetails.disableIndefiniteAccess,\r\n\t};\r\n}\r\n","/**\r\n * @copyright Copyright 2025 Epic Systems Corporation\r\n * @file Facilitated App Agreement Button Showroom\r\n * @module Epic.AppOrchard.Core.FacilitatedAppAgreementButton\r\n */\r\n\r\nimport { As, Box, Button, Flex, GridItem, Heading, Text } from \"@chakra-ui/react\";\r\nimport { useAsync } from \"@epic/react-async-hook\";\r\nimport { AgreementModal, AOLink, StatusModal } from \"ao/components/Core\";\r\nimport { requestFacilitatedAppAgreement } from \"ao/components/Showroom/data/data\";\r\nimport { useSiteInfoState } from \"ao/state/siteInfo\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport { getBaseUrl, isLocalhost } from \"ao/utils/helpers\";\r\nimport { isInFlight } from \"ao/utils/useAsyncHelpers\";\r\nimport { FC, memo, useCallback, useMemo, useState } from \"react\";\r\n\r\ninterface IProps {\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\theaderColor: string;\r\n\tbuttonBackgroundColor: string;\r\n\tbuttonBorderColor: string;\r\n\treload: () => void;\r\n\tbuttonsAs?: As;\r\n}\r\n\r\nexport const FacilitatedAppAgreementButton: FC<IProps> = memo((props: IProps) => {\r\n\t//#region state and functions\r\n\r\n\tconst { appDetails, headerColor, buttonBackgroundColor, buttonBorderColor, reload, buttonsAs } = props;\r\n\r\n\tconst [showAppTermsModal, setShowAppTermsModal] = useState<boolean>(false);\r\n\tconst [showSuccessModal, setShowSuccessModal] = useState<boolean>(false);\r\n\tconst [saveError, setSaveError] = useState<string>(\"\");\r\n\r\n\tconst { siteInfo } = useSiteInfoState((selectors) => selectors.getState(), []);\r\n\tconst isShowroomPublic = !isLocalhost() && !siteInfo.isAdminSite;\r\n\tconst baseUrl = useMemo(() => (isShowroomPublic ? siteInfo.vendorServicesUrl : getBaseUrl()), [\r\n\t\tisShowroomPublic,\r\n\t\tsiteInfo.vendorServicesUrl,\r\n\t]);\r\n\tconst showroomBaseUrl = useMemo(() => getBaseUrl(), []);\r\n\r\n\tconst appModel = appDetails.appModel;\r\n\tconst vendorName = appModel.orgName ?? \"the vendor\";\r\n\r\n\tconst appAgreementUrl = isShowroomPublic\r\n\t\t? `${showroomBaseUrl}VendorServices/api/Showroom/AppAgreement?termId=${appModel.agreementId}&download=false`\r\n\t\t: `${baseUrl}Developer/AppAgreement?termId=${appModel.agreementId}`;\r\n\r\n\tconst appAgreementDownloadUrl = isShowroomPublic\r\n\t\t? `${showroomBaseUrl}VendorServices/api/Showroom/AppAgreement?termId=${appModel.agreementId}&download=true`\r\n\t\t: `${baseUrl}Developer/AppAgreement?termId=${appModel.agreementId}&download=true`;\r\n\r\n\tconst handleModalClose = useCallback(() => {\r\n\t\tsetShowAppTermsModal(false);\r\n\t}, []);\r\n\r\n\tconst [requestingAgreementState, requestFacilitatedAgreement] = useAsync(requestFacilitatedAppAgreement, {\r\n\t\texecuteImmediately: false,\r\n\t\tdisplayName: \"requestFacilitatedAgreement\",\r\n\t\tonSuccess: () => setShowSuccessModal(true),\r\n\t\tonFailure: (error) => {\r\n\t\t\tconsole.log(\"Error requesting facilitated agreement\", error);\r\n\t\t\tsetSaveError(\"Try again later or contact your Epic representative if this continues to happen.\");\r\n\t\t},\r\n\t});\r\n\r\n\tconst handleRequestFacilitatedAgreement = useCallback(\r\n\t\t() =>\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\trequestFacilitatedAgreement(appDetails.appId!);\r\n\t\t\t}, 100),\r\n\t\t[requestFacilitatedAgreement, appDetails.appId],\r\n\t);\r\n\r\n\tconst handleUseFacilitatedAgreement = useCallback(() => {\r\n\t\tsetShowAppTermsModal(false);\r\n\t\thandleRequestFacilitatedAgreement();\r\n\t}, [handleRequestFacilitatedAgreement]);\r\n\r\n\tconst handleUseFacilitatedAgreementClicked = useCallback(() => {\r\n\t\tsetShowAppTermsModal(true);\r\n\t}, []);\r\n\r\n\tconst isRequesting = isInFlight(requestingAgreementState);\r\n\r\n\t//#endregion\r\n\r\n\tconst UseFacilitatedAgreementButton = buttonsAs || Button;\r\n\r\n\tconst justify = \"center\";\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<GridItem gridArea=\"header1\">\r\n\t\t\t\t{!appDetails.facilitatedAppAgreementRequested && (\r\n\t\t\t\t\t<Heading as=\"h3\" color={headerColor} textAlign={justify} fontFamily={\"Jost\"}>\r\n\t\t\t\t\t\tReady to License?\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t)}\r\n\t\t\t</GridItem>\r\n\t\t\t<GridItem gridArea=\"middle1\">\r\n\t\t\t\t{!appDetails.facilitatedAppAgreementRequested ? (\r\n\t\t\t\t\t<Text textAlign={justify} fontWeight=\"300\" pt=\"8px\" pb=\"20px\">\r\n\t\t\t\t\t\t{appModel.name}'s license is available through {siteInfo.galleryTokens.galleryName}.\r\n\t\t\t\t\t\tReview the terms in the app agreement, and if you choose to license it, download,\r\n\t\t\t\t\t\tsign, and return the agreement to {vendorName}.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<Text textAlign={justify} fontWeight=\"300\" pt=\"8px\" pb=\"20px\">\r\n\t\t\t\t\t\t{appModel.name}'s agreement was requested by{\" \"}\r\n\t\t\t\t\t\t{appDetails.facilitatedAppAgreementRequestedByUser} from your organization on{\" \"}\r\n\t\t\t\t\t\t{appDetails.facilitatedAppAgreementRequestedOn}.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t)}\r\n\t\t\t</GridItem>\r\n\r\n\t\t\t<GridItem gridArea=\"button1\">\r\n\t\t\t\t{!appDetails.facilitatedAppAgreementRequested && (\r\n\t\t\t\t\t<Flex justify={justify}>\r\n\t\t\t\t\t\t<UseFacilitatedAgreementButton\r\n\t\t\t\t\t\t\tonClick={handleUseFacilitatedAgreementClicked}\r\n\t\t\t\t\t\t\tdisabled={isRequesting}\r\n\t\t\t\t\t\t\tisLoading={isRequesting}\r\n\t\t\t\t\t\t\tbackgroundColor={buttonBackgroundColor}\r\n\t\t\t\t\t\t\tborder={`solid 1px ${buttonBorderColor}`}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tUse Facilitated App Agreement\r\n\t\t\t\t\t\t</UseFacilitatedAgreementButton>\r\n\t\t\t\t\t</Flex>\r\n\t\t\t\t)}\r\n\t\t\t</GridItem>\r\n\r\n\t\t\t<AgreementModal\r\n\t\t\t\tisOpen={showAppTermsModal}\r\n\t\t\t\theader={\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box fontWeight=\"bold\">Application Agreement</Box>\r\n\t\t\t\t\t\t<Box fontWeight=\"normal\" fontSize=\"medium\" mt=\"0.5em\">\r\n\t\t\t\t\t\t\tThis app is eligible for license facilitation, and {vendorName} has opted in, so\r\n\t\t\t\t\t\t\ttheir product license is available through {siteInfo.galleryTokens.galleryName}.\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t\ttermsUrl={appAgreementUrl}\r\n\t\t\t\tdownloadTermsUrl={appAgreementDownloadUrl}\r\n\t\t\t\ttermsAriaLabel=\"Application Agreement Terms\"\r\n\t\t\t\tacceptCaption=\"Notify Vendor & Download\"\r\n\t\t\t\tacceptButtonDownloadsAgreement\r\n\t\t\t\tonClose={handleModalClose}\r\n\t\t\t\tonAgree={handleUseFacilitatedAgreement}\r\n\t\t\t\tdownloadFileName={`${appModel.name} Application Agreement.pdf`}\r\n\t\t\t\tskipSigning\r\n\t\t\t\tadditionalDetails={\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box fontWeight=\"bold\">\r\n\t\t\t\t\t\t\tNotify {vendorName} that you're interested below, or contact and work with them\r\n\t\t\t\t\t\t\tdirectly to license their product.\r\n\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t<Text mt=\"0.5em\">\r\n\t\t\t\t\t\t\tTo learn more about license facilitation, including app license terms criteria and\r\n\t\t\t\t\t\t\tapp eligibility criteria, see{\" \"}\r\n\t\t\t\t\t\t\t<AOLink url={`${baseUrl}Article/Index?docid=LicenseFacilitation`} isExternal>\r\n\t\t\t\t\t\t\t\tLicense Facilitation Information\r\n\t\t\t\t\t\t\t</AOLink>\r\n\t\t\t\t\t\t\t.\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t/>\r\n\t\t\t<StatusModal\r\n\t\t\t\ttitle=\"Error\"\r\n\t\t\t\tmessage={saveError}\r\n\t\t\t\tisOpen={!!saveError}\r\n\t\t\t\tonClose={() => setSaveError(\"\")}\r\n\t\t\t\tstatus=\"error\"\r\n\t\t\t/>\r\n\t\t\t<StatusModal\r\n\t\t\t\ttitle=\"Success\"\r\n\t\t\t\tmessage={\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<Box>{vendorName} was notified that you're interested in using their agreement.</Box>\r\n\t\t\t\t\t\t<Box>Sign the agreement and return it to {vendorName} to execute the agreement.</Box>\r\n\t\t\t\t\t</>\r\n\t\t\t\t}\r\n\t\t\t\tisOpen={showSuccessModal}\r\n\t\t\t\tonClose={() => {\r\n\t\t\t\t\treload();\r\n\t\t\t\t\tsetShowSuccessModal(false);\r\n\t\t\t\t}}\r\n\t\t\t\tstatus=\"success\"\r\n\t\t\t\tcloseButtonText=\"Okay\"\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2023 Epic Systems Corporation\r\n * @file button for nomination apps\r\n * @module Epic.AppOrchard.Showroom.NominateButton\r\n */\r\n\r\nimport { Box, Button, ButtonProps, Link, Text, useDisclosure, useToast } from \"@chakra-ui/react\";\r\nimport { ISuccessHandler, useAsync } from \"@epic/react-async-hook\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { ConfirmationModal } from \"ao/components/Core\";\r\nimport { nominateApp } from \"ao/components/Showroom/data/data\";\r\nimport { IUserSecurity } from \"ao/types\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport React, { FunctionComponent, memo, useCallback } from \"react\";\r\nimport { BiHeart } from \"react-icons/bi\";\r\n\r\ninterface IProps {\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\tuserSecurity: IUserSecurity;\r\n\tsetAppDetails: (x: IShowroomAppDownloadModel) => void;\r\n\tbuttonProps?: ButtonProps;\r\n\ticonColor?: string;\r\n\texcludeIcon?: boolean;\r\n}\r\n\r\nexport const NominateButton: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { appDetails, userSecurity, setAppDetails, buttonProps, iconColor, excludeIcon } = props;\r\n\r\n\tconst toast = useToast();\r\n\r\n\tconst { isOpen, onOpen, onClose } = useDisclosure();\r\n\r\n\tconst handleSuccess = useCallback<ISuccessHandler<typeof nominateApp>>(\r\n\t\t(response) => {\r\n\t\t\tonClose();\r\n\t\t\tsetAppDetails({\r\n\t\t\t\t...appDetails,\r\n\t\t\t\tinterestedOn: response.InterestedOn,\r\n\t\t\t\tinterestedCount: response.InterestedCount,\r\n\t\t\t});\r\n\r\n\t\t\ttoast({\r\n\t\t\t\ttitle: \"Success\",\r\n\t\t\t\tdescription: \"App successfully nominated\",\r\n\t\t\t\tstatus: \"success\",\r\n\t\t\t\tduration: config.ToastDuration,\r\n\t\t\t\tisClosable: true,\r\n\t\t\t});\r\n\t\t},\r\n\t\t[appDetails, onClose, setAppDetails, toast],\r\n\t);\r\n\r\n\tconst handleFailure = useCallback<ISuccessHandler<typeof nominateApp>>(() => {\r\n\t\tonClose();\r\n\t\ttoast({\r\n\t\t\ttitle: \"Error\",\r\n\t\t\tdescription: \"something went wrong\",\r\n\t\t\tstatus: \"error\",\r\n\t\t\tduration: config.ToastDuration,\r\n\t\t\tisClosable: true,\r\n\t\t});\r\n\t}, [onClose, toast]);\r\n\r\n\tconst [, handleNominateApp] = useAsync(nominateApp, {\r\n\t\texecuteImmediately: false,\r\n\t\tdisplayName: \"NominateApp\",\r\n\t\tonSuccess: handleSuccess,\r\n\t\tonFailure: handleFailure,\r\n\t});\r\n\r\n\tconst handleNominateClicked = useCallback(() => {\r\n\t\thandleNominateApp(appDetails.appId ?? -1);\r\n\t}, [appDetails.appId, handleNominateApp]);\r\n\r\n\tconst computedButtonProps: ButtonProps = {\r\n\t\tcolorScheme: buttonProps?.colorScheme || \"showroomPrimary\",\r\n\r\n\t\tfontWeight: buttonProps?.fontWeight || \"normal\",\r\n\t\tpx: buttonProps?.px || buttonProps?.paddingX || 2,\r\n\t\tvariant: buttonProps?.variant || \"ghost\",\r\n\t\ticonSpacing: buttonProps?.iconSpacing || \"3px\",\r\n\t\t...buttonProps,\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Button\r\n\t\t\t\t{...computedButtonProps}\r\n\t\t\t\tonClick={\r\n\t\t\t\t\tuserSecurity.organizationGovernanceUrl || userSecurity.organizationGovernanceMessage\r\n\t\t\t\t\t\t? onOpen\r\n\t\t\t\t\t\t: handleNominateClicked\r\n\t\t\t\t}\r\n\t\t\t\tleftIcon={excludeIcon ? <BiHeart size={20} color={iconColor} /> : <></>}\r\n\t\t\t\ttitle=\"Let the person with Can Purchase Apps permission at your organization know you're interested in this product\"\r\n\t\t\t>\r\n\t\t\t\tNominate\r\n\t\t\t</Button>\r\n\r\n\t\t\t<ConfirmationModal\r\n\t\t\t\ttitle=\"Message From Your Organization\"\r\n\t\t\t\tmessage={\r\n\t\t\t\t\t<Text>\r\n\t\t\t\t\t\t<Box>{userSecurity.organizationGovernanceMessage}</Box>\r\n\t\t\t\t\t\t<Link href={userSecurity.organizationGovernanceUrl} isExternal>\r\n\t\t\t\t\t\t\t{userSecurity.organizationGovernanceUrl}\r\n\t\t\t\t\t\t</Link>\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t}\r\n\t\t\t\tisOpen={isOpen}\r\n\t\t\t\tonCancel={onClose}\r\n\t\t\t\tonAccept={handleNominateClicked}\r\n\t\t\t\tacceptCaption=\"Nominate\"\r\n\t\t\t\tcancelCaption=\"Cancel\"\r\n\t\t\t\tisCentered\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2023 Epic Systems Corporation\r\n * @file showroom wrapper for NotImplementingNowButton\r\n * @module Epic.AppOrchard.Showroom.NotImplementingNowButtonWrapper\r\n */\r\n\r\nimport { Button, ButtonProps, useToast } from \"@chakra-ui/react\";\r\nimport { ISuccessHandler } from \"@epic/react-async-hook\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { markAsNotImplementingNow } from \"ao/components/Dashboard/data\";\r\nimport { MarkNowImplementingNowButton } from \"ao/components/Dashboard/widgets/nominatedApps/helperComponents/MarkNotImplementingNowButton\";\r\nimport { INominatedApp, IUserSecurity } from \"ao/types\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport React, { FunctionComponent, memo, useCallback } from \"react\";\r\n\r\ninterface IProps {\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\tuserSecurity: IUserSecurity;\r\n\tsetAppDetails: (x: IShowroomAppDownloadModel) => void;\r\n\tbuttonProps?: ButtonProps;\r\n\ticonColor?: string;\r\n}\r\n\r\nexport const NotImplementingNowButtonWrapper: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { appDetails, userSecurity, setAppDetails, buttonProps, iconColor } = props;\r\n\r\n\tconst notImplementingNowDetails = appDetails.notImplementingNowDetails;\r\n\r\n\t//INominated app Partial object\r\n\tconst nominatedApp: Partial<INominatedApp> = {\r\n\t\tappId: appDetails.appId,\r\n\t\tnominations: [],\r\n\t\tnotNowDecision: appDetails.notImplementingNowDetails,\r\n\t};\r\n\r\n\tconst toast = useToast();\r\n\r\n\tconst handleSuccess = useCallback<ISuccessHandler<typeof markAsNotImplementingNow>>(\r\n\t\t(response) => {\r\n\t\t\tsetAppDetails({\r\n\t\t\t\t...appDetails,\r\n\t\t\t\tnotImplementingNowDetails: response!,\r\n\t\t\t});\r\n\t\t\ttoast({\r\n\t\t\t\ttitle: \"Success\",\r\n\t\t\t\tdescription: \"Saved changes\",\r\n\t\t\t\tstatus: \"success\",\r\n\t\t\t\tduration: config.ToastDuration,\r\n\t\t\t\tisClosable: true,\r\n\t\t\t});\r\n\t\t},\r\n\t\t[appDetails, setAppDetails, toast],\r\n\t);\r\n\r\n\tconst handleFailure = useCallback(() => {\r\n\t\ttoast({\r\n\t\t\ttitle: \"Error\",\r\n\t\t\tdescription: \"Error saving the last change to the server.\",\r\n\t\t\tstatus: \"error\",\r\n\t\t\tduration: config.ToastDuration,\r\n\t\t\tisClosable: true,\r\n\t\t});\r\n\t}, [toast]);\r\n\r\n\treturn (\r\n\t\t<MarkNowImplementingNowButton\r\n\t\t\tapp={nominatedApp}\r\n\t\t\torgId={userSecurity.userOrganizationId!}\r\n\t\t\tsuccessHandler={handleSuccess}\r\n\t\t\tfailureHandler={handleFailure}\r\n\t\t\tinterestedCount={appDetails.interestedCount}\r\n\t\t\tbuttonAs={Button}\r\n\t\t\t{...buttonProps}\r\n\t\t\tbuttonText={notImplementingNowDetails ? \"Edit Status\" : \"Not Implementing Now\"}\r\n\t\t\texcludeIcon\r\n\t\t\ticonColor={iconColor}\r\n\t\t/>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2025 Epic Systems Corporation\r\n * @file Request download button in Showroom\r\n * @module Epic.AppOrchard.Core.ShowroomRequestDownloadButton\r\n */\r\n\r\nimport { As, Box, Button, Flex, GridItem, Heading, Text } from \"@chakra-ui/react\";\r\nimport { ISuccessHandler, useAsync } from \"@epic/react-async-hook\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { AgreementModal, AOLink, StatusAlert, StatusModal } from \"ao/components/Core\";\r\nimport { requestDownload } from \"ao/components/Showroom/data/data\";\r\nimport { ConsumerTypes } from \"ao/data\";\r\nimport { useSiteInfoState } from \"ao/state/siteInfo\";\r\nimport { IUserSecurity } from \"ao/types\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport { getBaseUrl, isLocalhost } from \"ao/utils/helpers\";\r\nimport { isInFlight } from \"ao/utils/useAsyncHelpers\";\r\nimport { ChangeEvent, FC, memo, useCallback, useMemo, useState } from \"react\";\r\n\r\ninterface IProps {\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\theaderColor: string;\r\n\tbuttonBackgroundColor: string;\r\n\tbuttonBorderColor: string;\r\n\tuserSecurity: IUserSecurity;\r\n\treload: () => void;\r\n\tbuttonsAs?: As;\r\n\tisShowroom?: boolean;\r\n}\r\n\r\nexport const ShowroomRequestDownloadButton: FC<IProps> = memo((props: IProps) => {\r\n\t//#region state and functions\r\n\r\n\tconst {\r\n\t\tappDetails,\r\n\t\theaderColor,\r\n\t\tbuttonBackgroundColor,\r\n\t\tbuttonBorderColor,\r\n\t\tuserSecurity,\r\n\t\treload,\r\n\t\tbuttonsAs,\r\n\t\tisShowroom,\r\n\t} = props;\r\n\r\n\tconst [showAgreementModal, setShowAgreementModal] = useState<boolean>(false);\r\n\tconst [showAppTermsModal, setShowAppTermsModal] = useState<boolean>(false);\r\n\tconst [showSuccessModal, setShowSuccessModal] = useState<boolean>(false);\r\n\tconst [acceptChecked, setAcceptedChecked] = useState<boolean>(false);\r\n\tconst [saveError, setSaveError] = useState<string>(\"\");\r\n\r\n\tconst { siteInfo } = useSiteInfoState((selectors) => selectors.getState(), []);\r\n\tconst isShowroomPublic = isShowroom && !isLocalhost() && !siteInfo.isAdminSite;\r\n\tconst baseUrl = useMemo(() => (isShowroomPublic ? siteInfo.vendorServicesUrl : getBaseUrl()), [\r\n\t\tisShowroomPublic,\r\n\t\tsiteInfo.vendorServicesUrl,\r\n\t]);\r\n\r\n\tconst showroomBaseUrl = useMemo(() => getBaseUrl(), []);\r\n\r\n\tconst appModel = appDetails.appModel;\r\n\tconst vendorName = appModel.orgName ?? \"the vendor\";\r\n\r\n\tconst hasAppTerms = appModel.agreementId !== null && appModel.agreementId > 0;\r\n\tconst hasParticipantTerms = appDetails.participantTermsId !== null && appDetails.participantTermsId > 0;\r\n\tconst isAppAgreementFacilitated = hasAppTerms && appModel.isAppAgreementFacilitated && isShowroom;\r\n\r\n\tconst appAgreementUrl = isShowroomPublic\r\n\t\t? `${showroomBaseUrl}VendorServices/api/Showroom/AppAgreement?termId=${appModel.agreementId}&download=false`\r\n\t\t: `${baseUrl}Developer/AppAgreement?termId=${appModel.agreementId}`;\r\n\r\n\tconst appAgreementDownloadUrl = isShowroomPublic\r\n\t\t? `${showroomBaseUrl}VendorServices/api/Showroom/AppAgreement?termId=${appModel.agreementId}&download=true`\r\n\t\t: `${baseUrl}Developer/AppAgreement?termId=${appModel.agreementId}&download=true`;\r\n\r\n\tconst participantAgreementUrl = `${baseUrl}Gallery/VendorServicesCustomerAgreement?termsId=${appDetails.participantTermsId}`;\r\n\tconst participantAgreementDownloadUrl = `${baseUrl}Gallery/VendorServicesCustomerAgreement?termsId=${appDetails.participantTermsId}&download=true`;\r\n\r\n\tconst handleModalClose = useCallback(() => {\r\n\t\tsetAcceptedChecked(false);\r\n\t\tsetShowAgreementModal(false);\r\n\t\tsetShowAppTermsModal(false);\r\n\t}, []);\r\n\r\n\tconst handleAcceptChecked = useCallback(\r\n\t\t(ev: ChangeEvent<HTMLInputElement>) => setAcceptedChecked(ev.target.checked),\r\n\t\t[],\r\n\t);\r\n\r\n\tconst handleRequestDownloadSuccess = useCallback<ISuccessHandler<typeof requestDownload>>((response) => {\r\n\t\tif (response.Success) {\r\n\t\t\tsetShowSuccessModal(true);\r\n\t\t} else {\r\n\t\t\tsetSaveError(response.Message);\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst [requestingDownloadState, requestAppDownload] = useAsync(requestDownload, {\r\n\t\texecuteImmediately: false,\r\n\t\tdisplayName: \"requestDownload\",\r\n\t\tonSuccess: handleRequestDownloadSuccess,\r\n\t\tonFailure: () =>\r\n\t\t\tsetSaveError(\r\n\t\t\t\t\"Please try again later or contact your Epic representative if this continues to happen.\",\r\n\t\t\t),\r\n\t});\r\n\r\n\tconst handleRequestDownload = useCallback(() => {\r\n\t\tconst appTerms = isAppAgreementFacilitated ? null : appModel.agreementId;\r\n\t\trequestAppDownload(\r\n\t\t\tappDetails.appId!,\r\n\t\t\tappDetails.participantTermsId,\r\n\t\t\tappTerms,\r\n\t\t\tappDetails.accessTokenValidity,\r\n\t\t\tappDetails.refreshTokenValidity,\r\n\t\t\tappDetails.disableIndefiniteAccess,\r\n\t\t);\r\n\t}, [\r\n\t\tisAppAgreementFacilitated,\r\n\t\tappModel.agreementId,\r\n\t\trequestAppDownload,\r\n\t\tappDetails.appId,\r\n\t\tappDetails.participantTermsId,\r\n\t\tappDetails.accessTokenValidity,\r\n\t\tappDetails.refreshTokenValidity,\r\n\t\tappDetails.disableIndefiniteAccess,\r\n\t]);\r\n\r\n\tconst handleParticipantTermsAccepted = useCallback(() => {\r\n\t\tsetShowAgreementModal(false);\r\n\t\tsetAcceptedChecked(false);\r\n\t\tif (hasAppTerms && !isAppAgreementFacilitated) {\r\n\t\t\tsetShowAppTermsModal(true);\r\n\t\t} else {\r\n\t\t\thandleRequestDownload();\r\n\t\t}\r\n\t}, [handleRequestDownload, hasAppTerms, isAppAgreementFacilitated]);\r\n\r\n\tconst handleAppTermsAccepted = useCallback(() => {\r\n\t\tsetShowAppTermsModal(false);\r\n\t\tsetAcceptedChecked(false);\r\n\t\thandleRequestDownload();\r\n\t}, [handleRequestDownload]);\r\n\r\n\tconst handleRequestClicked = useCallback(() => {\r\n\t\tif (appModel.isEpicOnFhirApp) {\r\n\t\t\thandleRequestDownload();\r\n\t\t} else if (hasParticipantTerms) {\r\n\t\t\tsetShowAgreementModal(true);\r\n\t\t} else {\r\n\t\t\thandleParticipantTermsAccepted();\r\n\t\t}\r\n\t}, [\r\n\t\tappModel.isEpicOnFhirApp,\r\n\t\thandleParticipantTermsAccepted,\r\n\t\thandleRequestDownload,\r\n\t\thasParticipantTerms,\r\n\t]);\r\n\r\n\tconst isRequesting = isInFlight(requestingDownloadState);\r\n\r\n\tconst buttonTitle = `Request product creator approval to download the product's client IDs or other product information available through the ${config.SiteName} website.`;\r\n\r\n\tconst isBackend = appModel.consumerType === ConsumerTypes.Backend;\r\n\tconst isOwnApp = appModel.organizationId === userSecurity.userOrganizationId;\r\n\r\n\tconst canDownloadAndActivate =\r\n\t\t!isOwnApp &&\r\n\t\tappModel.isEpicOnFhirApp &&\r\n\t\t!appModel.isConfidentialClient &&\r\n\t\t!isBackend &&\r\n\t\t!(appModel.isRelatedOrgApp && !appDetails.isDownloaded);\r\n\r\n\tconst isDownloadAvailable =\r\n\t\tuserSecurity.canPurchase &&\r\n\t\tappModel.showDownloadLink &&\r\n\t\t!appModel.isAutoDownloadedClient &&\r\n\t\t!appDetails.isDownloaded &&\r\n\t\t!isOwnApp &&\r\n\t\t!appModel.requiresFutureEpicVersion &&\r\n\t\t!appModel.isRelatedOrgApp;\r\n\tconst showSection =\r\n\t\tappDetails.previousAPILicenseExists ||\r\n\t\tappDetails.isUSCDIDownloadSet ||\r\n\t\tappDetails.appCanBeDownloadedWithoutApiLicense;\r\n\r\n\tconst downloadHeaderText = \"Ready to Set Up This Product in Your System?\";\r\n\tlet infoText = \"\";\r\n\r\n\tconst buttonText = canDownloadAndActivate ? \"Download Client IDs\" : \"Request Client IDs\";\r\n\r\n\tif (isDownloadAvailable) {\r\n\t\tinfoText = canDownloadAndActivate\r\n\t\t\t? \"This will download and activate both the non-production client ID and the production client ID.\"\r\n\t\t\t: `Sending a client ID request will notify ${vendorName} of your interest and indicate that you're ready to begin the app implementation. The same request will be used for both the non-production and production client IDs.`;\r\n\t}\r\n\r\n\tif (isOwnApp) {\r\n\t\tinfoText = appModel.ownDownloadExists\r\n\t\t\t? \"This product was created by your organization so you do not need to request download through this page. This product is active in your environments.\"\r\n\t\t\t: \"This product was created by your organization so you do not need to request download through this page. A user from your organization with the Can Activate Clients permission can activate this product for your environments.\";\r\n\t}\r\n\r\n\tif (appModel.isRelatedOrgApp) {\r\n\t\tinfoText = appDetails.isDownloaded\r\n\t\t\t? `This product was created by an organization related to your organization, ${vendorName}. This product is active in your environments.`\r\n\t\t\t: `This product was created by an organization related to your organization, ${vendorName}, so you do not need to request download through this page. Instead, the product should be activated by a user from your organization with the Can Activate Clients permission via the homegrown apps activation workflow.`;\r\n\t}\r\n\r\n\tif (appModel.requiresFutureEpicVersion) {\r\n\t\tinfoText = \"This product uses features that are not supported on your current Epic version.\";\r\n\t}\r\n\r\n\t//#endregion\r\n\r\n\tconst DownloadButton = buttonsAs || Button;\r\n\r\n\tconst justify = \"center\";\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{showSection && (isDownloadAvailable || infoText) && (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<GridItem gridArea=\"header2\">\r\n\t\t\t\t\t\t{isDownloadAvailable && (\r\n\t\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\t\tas=\"h3\"\r\n\t\t\t\t\t\t\t\tcolor={headerColor}\r\n\t\t\t\t\t\t\t\ttextAlign={justify}\r\n\t\t\t\t\t\t\t\tfontFamily={isShowroom ? \"Jost\" : \"unset\"}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{downloadHeaderText}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</GridItem>\r\n\t\t\t\t\t<GridItem gridArea=\"middle2\">\r\n\t\t\t\t\t\t{infoText && (\r\n\t\t\t\t\t\t\t<Text textAlign={justify} fontWeight=\"300\" pt=\"8px\" pb=\"20px\">\r\n\t\t\t\t\t\t\t\t{infoText}\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{isDownloadAvailable && appDetails.hasPotentiallyUnsafeProviderFacingDCR && (\r\n\t\t\t\t\t\t\t<StatusAlert\r\n\t\t\t\t\t\t\t\tmb=\"0.5em\"\r\n\t\t\t\t\t\t\t\tmessage={\r\n\t\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t\tThis provider-facing app uses dynamic client registration (DCR) and\r\n\t\t\t\t\t\t\t\t\t\tyour system is on an Epic version before the Epic Nov 2023 version,\r\n\t\t\t\t\t\t\t\t\t\twhich resolved some issues with provider-facing DCR. This app may run\r\n\t\t\t\t\t\t\t\t\t\tinto issues depending on the specifics of the OAuth 2.0 workflow.\r\n\t\t\t\t\t\t\t\t\t\tContact the vendor and see the{\" \"}\r\n\t\t\t\t\t\t\t\t\t\t<AOLink\r\n\t\t\t\t\t\t\t\t\t\t\turl={`${baseUrl}Article/Index?docId=OAuth2§ion=Standalone-Oauth2-OfflineAccess-0`}\r\n\t\t\t\t\t\t\t\t\t\t\tisExternal\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tdocumentation on dynamic client registration\r\n\t\t\t\t\t\t\t\t\t\t</AOLink>{\" \"}\r\n\t\t\t\t\t\t\t\t\t\tfor more details.\r\n\t\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstatus=\"warning\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</GridItem>\r\n\r\n\t\t\t\t\t<GridItem gridArea=\"button2\">\r\n\t\t\t\t\t\t{isDownloadAvailable && (\r\n\t\t\t\t\t\t\t<Flex justify={justify}>\r\n\t\t\t\t\t\t\t\t<DownloadButton\r\n\t\t\t\t\t\t\t\t\taria-label={buttonText}\r\n\t\t\t\t\t\t\t\t\ttitle={buttonTitle}\r\n\t\t\t\t\t\t\t\t\tonClick={handleRequestClicked}\r\n\t\t\t\t\t\t\t\t\tdisabled={isRequesting}\r\n\t\t\t\t\t\t\t\t\tisLoading={isRequesting}\r\n\t\t\t\t\t\t\t\t\tbackgroundColor={buttonBackgroundColor}\r\n\t\t\t\t\t\t\t\t\tborder={`solid 1px ${buttonBorderColor}`}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{buttonText}\r\n\t\t\t\t\t\t\t\t</DownloadButton>\r\n\t\t\t\t\t\t\t</Flex>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</GridItem>\r\n\r\n\t\t\t\t\t{hasParticipantTerms && (\r\n\t\t\t\t\t\t<AgreementModal\r\n\t\t\t\t\t\t\tisOpen={showAgreementModal}\r\n\t\t\t\t\t\t\theader=\"Terms of Service\"\r\n\t\t\t\t\t\t\tacceptChecked={acceptChecked}\r\n\t\t\t\t\t\t\ttermsUrl={participantAgreementUrl}\r\n\t\t\t\t\t\t\tdownloadTermsUrl={participantAgreementDownloadUrl}\r\n\t\t\t\t\t\t\ttermsAriaLabel=\"Participant Agreement Terms\"\r\n\t\t\t\t\t\t\tacceptCaption={hasAppTerms ? \"Agree\" : \"I Accept\"}\r\n\t\t\t\t\t\t\tonClose={handleModalClose}\r\n\t\t\t\t\t\t\tonAgree={handleParticipantTermsAccepted}\r\n\t\t\t\t\t\t\tonAcceptCheckedChanged={handleAcceptChecked}\r\n\t\t\t\t\t\t\tdownloadFileName=\"Terms of Service.pdf\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{hasAppTerms && (\r\n\t\t\t\t\t\t<AgreementModal\r\n\t\t\t\t\t\t\tisOpen={showAppTermsModal}\r\n\t\t\t\t\t\t\theader=\"Application Agreement\"\r\n\t\t\t\t\t\t\tacceptChecked={acceptChecked}\r\n\t\t\t\t\t\t\ttermsUrl={appAgreementUrl}\r\n\t\t\t\t\t\t\tdownloadTermsUrl={appAgreementDownloadUrl}\r\n\t\t\t\t\t\t\ttermsAriaLabel=\"Application Agreement Terms\"\r\n\t\t\t\t\t\t\tacceptCaption=\"I accept\"\r\n\t\t\t\t\t\t\tonClose={handleModalClose}\r\n\t\t\t\t\t\t\tonAgree={handleAppTermsAccepted}\r\n\t\t\t\t\t\t\tonAcceptCheckedChanged={handleAcceptChecked}\r\n\t\t\t\t\t\t\tdownloadFileName={`${appModel.name} Application Agreement.pdf`}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t<StatusModal\r\n\t\t\t\t\t\ttitle=\"Error\"\r\n\t\t\t\t\t\tmessage={saveError}\r\n\t\t\t\t\t\tisOpen={!!saveError}\r\n\t\t\t\t\t\tonClose={() => setSaveError(\"\")}\r\n\t\t\t\t\t\tstatus=\"error\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<StatusModal\r\n\t\t\t\t\t\ttitle=\"Success\"\r\n\t\t\t\t\t\tmessage={\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<Box>\r\n\t\t\t\t\t\t\t\t\t{canDownloadAndActivate\r\n\t\t\t\t\t\t\t\t\t\t? \"Successfully associated this product with your organization, the client IDs will be downloaded into your system within a day.\"\r\n\t\t\t\t\t\t\t\t\t\t: `Your client ID download request was successfully submitted to ${vendorName}. This product's client IDs will be downloaded into your system after they approve your request.`}\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t\t<Box my=\"5px\">\r\n\t\t\t\t\t\t\t\t\tSee{\" \"}\r\n\t\t\t\t\t\t\t\t\t<AOLink url={`${baseUrl}Picked?id={${appDetails.appId!}`} isExternal>\r\n\t\t\t\t\t\t\t\t\t\tPicked Apps\r\n\t\t\t\t\t\t\t\t\t</AOLink>{\" \"}\r\n\t\t\t\t\t\t\t\t\tfor a full list of products your organization has requested or downloaded.\r\n\t\t\t\t\t\t\t\t\tYou may need to log in again to access this page.\r\n\t\t\t\t\t\t\t\t</Box>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tisOpen={showSuccessModal}\r\n\t\t\t\t\t\tonClose={() => {\r\n\t\t\t\t\t\t\treload();\r\n\t\t\t\t\t\t\tsetShowSuccessModal(false);\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tstatus=\"success\"\r\n\t\t\t\t\t\tcloseButtonText=\"Okay\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2025 Epic Systems Corporation\r\n * @file button to update the token validity\r\n * @module Epic.AppOrchard.Showroom.ShowroomUpdateTokensButton\r\n */\r\n\r\nimport { Link, useToast } from \"@chakra-ui/react\";\r\nimport { ISuccessHandler, useAsync } from \"@epic/react-async-hook\";\r\nimport { config } from \"ao/appConfig\";\r\nimport { StatusModal } from \"ao/components/Core\";\r\nimport { requestDownload } from \"ao/components/Showroom/data/data\";\r\nimport { DownloadApprovedStatus } from \"ao/data\";\r\nimport { IUserSecurity } from \"ao/types\";\r\nimport { IShowroomAppDownloadModel } from \"ao/types/showroom\";\r\nimport { isInFlight } from \"ao/utils/useAsyncHelpers\";\r\nimport React, { FunctionComponent, memo, useCallback, useRef, useState } from \"react\";\r\nimport { EditTokensModal, setDefaultTokens } from \"./EditTokensModal\";\r\n\r\ninterface IProps {\r\n\tappDetails: IShowroomAppDownloadModel;\r\n\tuserSecurity: IUserSecurity;\r\n\tsetAppDetails: (x: IShowroomAppDownloadModel) => void;\r\n}\r\n\r\nexport const ShowroomUpdateTokensButton: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { appDetails, setAppDetails } = props;\r\n\r\n\t//#region local state and hooks\r\n\tconst [showTokenModal, setShowTokenModal] = useState<boolean>(false);\r\n\tconst [showSuccessModal, setShowSuccessModal] = useState<boolean>(false);\r\n\r\n\tconst appModel = appDetails.appModel;\r\n\tconst updateTokenButtonRef = useRef<HTMLAnchorElement>(null);\r\n\r\n\tconst toast = useToast();\r\n\r\n\t//#endregion\r\n\r\n\t//#region async API handlers\r\n\r\n\tconst handleRequestDownloadSuccess = useCallback<ISuccessHandler<typeof requestDownload>>(\r\n\t\t(response, extras) => {\r\n\t\t\tconst [, , , accessTokenValidity, refreshTokenValidity, disableIndefiniteAccess] = extras.params;\r\n\r\n\t\t\tif (response.Success) {\r\n\t\t\t\tsetShowTokenModal(false);\r\n\t\t\t\tsetShowSuccessModal(true);\r\n\r\n\t\t\t\tconst newDetails = {\r\n\t\t\t\t\t...appDetails,\r\n\t\t\t\t\taccessTokenValidity: accessTokenValidity ?? appDetails.accessTokenValidity,\r\n\t\t\t\t\trefreshTokenValidity: refreshTokenValidity ?? appDetails.refreshTokenValidity,\r\n\t\t\t\t\tdisableIndefiniteAccess: disableIndefiniteAccess ?? appDetails.disableIndefiniteAccess,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetAppDetails(setDefaultTokens(newDetails));\r\n\t\t\t} else {\r\n\t\t\t\ttoast({\r\n\t\t\t\t\ttitle: \"Error\",\r\n\t\t\t\t\tstatus: \"error\",\r\n\t\t\t\t\tdescription: response.Message,\r\n\t\t\t\t\tduration: config.ToastDuration,\r\n\t\t\t\t\tisClosable: true,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t[appDetails, setAppDetails, toast],\r\n\t);\r\n\r\n\tconst [requestingDownloadState, requestAppDownload] = useAsync(requestDownload, {\r\n\t\texecuteImmediately: false,\r\n\t\tdisplayName: \"requestDownload\",\r\n\t\tonSuccess: (response, extras) => handleRequestDownloadSuccess(response, extras),\r\n\t\tonFailure: () =>\r\n\t\t\ttoast({\r\n\t\t\t\ttitle: \"Error\",\r\n\t\t\t\tdescription:\r\n\t\t\t\t\t\"Please try again later or contact your Epic representative if this continues to happen.\",\r\n\t\t\t\tstatus: \"error\",\r\n\t\t\t\tduration: config.ToastDuration,\r\n\t\t\t\tisClosable: true,\r\n\t\t\t}),\r\n\t});\r\n\r\n\tconst handleUpdateClicked = useCallback(() => {\r\n\t\tsetShowTokenModal(true);\r\n\t}, []);\r\n\r\n\tconst handleUpdate = useCallback(() => {\r\n\t\trequestAppDownload(\r\n\t\t\tappDetails.appId!,\r\n\t\t\tappDetails.participantTermsId,\r\n\t\t\tappModel.agreementId,\r\n\t\t\tappDetails.accessTokenValidity,\r\n\t\t\tappDetails.refreshTokenValidity,\r\n\t\t\tappDetails.disableIndefiniteAccess,\r\n\t\t);\r\n\t}, [\r\n\t\tappDetails.accessTokenValidity,\r\n\t\tappDetails.appId,\r\n\t\tappModel.agreementId,\r\n\t\tappDetails.disableIndefiniteAccess,\r\n\t\tappDetails.participantTermsId,\r\n\t\tappDetails.refreshTokenValidity,\r\n\t\trequestAppDownload,\r\n\t]);\r\n\r\n\tconst isRequesting = isInFlight(requestingDownloadState);\r\n\r\n\t//#endregion\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<Link\r\n\t\t\t\tonClick={handleUpdateClicked}\r\n\t\t\t\tisLoading={isRequesting}\r\n\t\t\t\tdisplay=\"inline-block\"\r\n\t\t\t\talignContent=\"center\"\r\n\t\t\t\tloadingText=\"Updating Token Validity\"\r\n\t\t\t\tref={updateTokenButtonRef}\r\n\t\t\t\tdisabled={\r\n\t\t\t\t\tappDetails.vendorApproved === DownloadApprovedStatus.Approved && appDetails.isSyncDisabled\r\n\t\t\t\t}\r\n\t\t\t\ttitle={`Update how long the product's OAuth 2.0 tokens are valid. ${\r\n\t\t\t\t\tappDetails.vendorApproved === DownloadApprovedStatus.Approved && appDetails.isSyncDisabled\r\n\t\t\t\t\t\t? \"Syncing to your Production system has been temporarily disabled for this app by Epic while the app is modified so you cannot modify the token validity. Contact your Epic representative and mention SLG 9084550 if you have any questions.\"\r\n\t\t\t\t\t\t: \"\"\r\n\t\t\t\t}`}\r\n\t\t\t>\r\n\t\t\t\tUpdate Token Validity\r\n\t\t\t</Link>\r\n\r\n\t\t\t<EditTokensModal\r\n\t\t\t\tisOpen={showTokenModal}\r\n\t\t\t\tonClose={() => setShowTokenModal(false)}\r\n\t\t\t\tappDetails={appDetails}\r\n\t\t\t\tsetAppDetails={setAppDetails}\r\n\t\t\t\tonAccept={handleUpdate}\r\n\t\t\t/>\r\n\t\t\t<StatusModal\r\n\t\t\t\ttitle=\"Success\"\r\n\t\t\t\tmessage={\r\n\t\t\t\t\tappModel.hasIndefiniteAccess\r\n\t\t\t\t\t\t? \"Successfully updated the token validity duration and/or whether the product has indefinite access. The settings will take effect when new tokens are issued to the product.\"\r\n\t\t\t\t\t\t: \"Successfully updated the token validity duration. The settings will take effect when new tokens are issued to the product.\"\r\n\t\t\t\t}\r\n\t\t\t\tisOpen={showSuccessModal}\r\n\t\t\t\tonClose={() => setShowSuccessModal(false)}\r\n\t\t\t\tstatus=\"success\"\r\n\t\t\t\tcloseButtonText=\"Okay\"\r\n\t\t\t\tfocusOnCloseRef={updateTokenButtonRef}\r\n\t\t\t/>\r\n\t\t</>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2024-2025 Epic Systems Corporation\r\n * @file banner of a showroom stage\r\n * @module Epic.AppOrchard.Showroom.StageBanner\r\n */\r\n\r\nimport { Box, BoxProps, Flex, Heading, Image, VStack } from \"@chakra-ui/react\";\r\nimport { showroomText } from \"ao/chakraTheme\";\r\nimport { PopoverWithHover } from \"ao/components/Core/PopoverWithHover\";\r\nimport { IGalleryStageModel } from \"ao/types/showroom\";\r\nimport { getBaseUrl } from \"ao/utils/helpers\";\r\nimport { FunctionComponent, memo, useMemo } from \"react\";\r\n\r\ninterface IProps {\r\n\tstage: IGalleryStageModel;\r\n\tshowComingSoon?: boolean;\r\n}\r\n\r\ntype Props = IProps & BoxProps;\r\n\r\nexport const StageBanner: FunctionComponent<Props> = memo((props) => {\r\n\tconst { stage, showComingSoon, ...rest } = props;\r\n\r\n\tconst baseUrl = useMemo(getBaseUrl, []);\r\n\r\n\tconst bannerContents = useMemo(\r\n\t\t() => (\r\n\t\t\t<Flex alignItems=\"center\" tabIndex={0} cursor=\"pointer\">\r\n\t\t\t\t{stage.iconPath && (\r\n\t\t\t\t\t<Image\r\n\t\t\t\t\t\tsrc={`${baseUrl}Content/images/${stage.iconPath}`}\r\n\t\t\t\t\t\tfallback={<></>}\r\n\t\t\t\t\t\tmaxH=\"25px\"\r\n\t\t\t\t\t\tmaxW=\"25px\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t\t<VStack alignItems=\"center\" ml=\"5px\">\r\n\t\t\t\t\t<Heading\r\n\t\t\t\t\t\tas=\"h4\"\r\n\t\t\t\t\t\tfontWeight=\"600\"\r\n\t\t\t\t\t\tfontSize=\"1.1rem\"\r\n\t\t\t\t\t\tfontFamily=\"Jost\"\r\n\t\t\t\t\t\tcolor={showroomText}\r\n\t\t\t\t\t\twhiteSpace={\"nowrap\"}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{stage.groupName.toLocaleUpperCase()}\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t{showComingSoon && (\r\n\t\t\t\t\t\t<Heading\r\n\t\t\t\t\t\t\tas=\"h5\"\r\n\t\t\t\t\t\t\tfontWeight=\"500\"\r\n\t\t\t\t\t\t\tfontSize=\"0.75rem\"\r\n\t\t\t\t\t\t\tfontFamily=\"Jost\"\r\n\t\t\t\t\t\t\tcolor={showroomText}\r\n\t\t\t\t\t\t\twhiteSpace={\"nowrap\"}\r\n\t\t\t\t\t\t\tmargin={\"0px !important\"}\r\n\t\t\t\t\t\t\tborderTop={`2px dashed ${showroomText}`}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{stage.comingSoonTitle}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</VStack>\r\n\t\t\t</Flex>\r\n\t\t),\r\n\t\t[stage.iconPath, stage.groupName, stage.comingSoonTitle, baseUrl, showComingSoon],\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\twidth=\"100%\"\r\n\t\t\tjustify=\"center\"\r\n\t\t\tbackground={`linear-gradient(42deg, ${stage.backgroundColor2 ?? \"#D6FFDC\"} 0%, ${\r\n\t\t\t\tstage.backgroundColor ?? \"#A6EBAF\"\r\n\t\t\t} 100%)`}\r\n\t\t\tpy=\"7px\"\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{stage.description ? (\r\n\t\t\t\t<PopoverWithHover\r\n\t\t\t\t\tpopoverContent={\r\n\t\t\t\t\t\t<Box\r\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={{\r\n\t\t\t\t\t\t\t\t__html: stage.description,\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpopoverStyles={{ bgColor: \"white\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{bannerContents}\r\n\t\t\t\t</PopoverWithHover>\r\n\t\t\t) : (\r\n\t\t\t\t<>{bannerContents}</>\r\n\t\t\t)}\r\n\t\t</Flex>\r\n\t);\r\n});\r\n","/**\r\n * @copyright Copyright 2023-2023 Epic Systems Corporation\r\n * @file Error alert page for Showroom\r\n * @module Epic.AppOrchard.Showroom.ShowroomErrorAlert\r\n */\r\n\r\nimport { Alert, AlertDescription, AlertIcon, AlertTitle } from \"@chakra-ui/react\";\r\nimport React, { FunctionComponent, memo } from \"react\";\r\n\r\ninterface IProps {\r\n\terrorMessage: string;\r\n\ttitle?: string;\r\n}\r\n\r\nexport const ShowroomErrorAlert: FunctionComponent<IProps> = memo((props) => {\r\n\tconst { errorMessage, title } = props;\r\n\r\n\treturn (\r\n\t\t<Alert\r\n\t\t\tstatus=\"error\"\r\n\t\t\tvariant=\"subtle\"\r\n\t\t\tflexDirection=\"column\"\r\n\t\t\talignItems=\"center\"\r\n\t\t\tjustifyContent=\"center\"\r\n\t\t\ttextAlign=\"center\"\r\n\t\t\tbackground=\"none\"\r\n\t\t>\r\n\t\t\t<AlertIcon boxSize=\"50px\" mr={0} />\r\n\t\t\t<AlertTitle mt={4} mb={1} fontSize=\"2xl\">\r\n\t\t\t\t{title ?? \"Whoops\"}\r\n\t\t\t</AlertTitle>\r\n\t\t\t<AlertDescription maxWidth=\"none\" fontSize=\"xl\">\r\n\t\t\t\t{errorMessage}\r\n\t\t\t</AlertDescription>\r\n\t\t</Alert>\r\n\t);\r\n});\r\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const QuestionIcon = createIcon({\n d:\n \"M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z\",\n displayName: \"QuestionIcon\",\n})\n","import { useCheckbox, UseCheckboxProps } from \"@chakra-ui/checkbox\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n HTMLChakraProps,\n SystemProps,\n} from \"@chakra-ui/system\"\nimport { cx, dataAttr, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SwitchProps\n extends Omit<UseCheckboxProps, \"isIndeterminate\">,\n Omit<HTMLChakraProps<\"label\">, keyof UseCheckboxProps>,\n ThemingProps<\"Switch\"> {\n /**\n * The spacing between the switch and its label text\n * @default 0.5rem\n * @type SystemProps[\"marginLeft\"]\n */\n spacing?: SystemProps[\"marginLeft\"]\n}\n\nexport const Switch = forwardRef<SwitchProps, \"input\">((props, ref) => {\n const styles = useMultiStyleConfig(\"Switch\", props)\n\n const { spacing = \"0.5rem\", children, ...ownProps } = omitThemingProps(props)\n\n const {\n state,\n getInputProps,\n getCheckboxProps,\n getRootProps,\n getLabelProps,\n } = useCheckbox(ownProps)\n\n const containerStyles: SystemStyleObject = React.useMemo(\n () => ({\n display: \"inline-block\",\n verticalAlign: \"middle\",\n lineHeight: \"normal\",\n ...styles.container,\n }),\n [styles.container],\n )\n\n const trackStyles: SystemStyleObject = React.useMemo(\n () => ({\n display: \"inline-flex\",\n flexShrink: 0,\n justifyContent: \"flex-start\",\n boxSizing: \"content-box\",\n cursor: \"pointer\",\n ...styles.track,\n }),\n [styles.track],\n )\n\n const labelStyles: SystemStyleObject = React.useMemo(\n () => ({\n userSelect: \"none\",\n marginStart: spacing,\n ...styles.label,\n }),\n [spacing, styles.label],\n )\n\n return (\n <chakra.label\n {...getRootProps()}\n className={cx(\"chakra-switch\", props.className)}\n __css={containerStyles}\n >\n <input className=\"chakra-switch__input\" {...getInputProps({}, ref)} />\n <chakra.span\n {...getCheckboxProps()}\n className=\"chakra-switch__track\"\n __css={trackStyles}\n >\n <chakra.span\n __css={styles.thumb}\n className=\"chakra-switch__thumb\"\n data-checked={dataAttr(state.isChecked)}\n data-hover={dataAttr(state.isHovered)}\n />\n </chakra.span>\n {children && (\n <chakra.span\n className=\"chakra-switch__label\"\n {...getLabelProps()}\n __css={labelStyles}\n >\n {children}\n </chakra.span>\n )}\n </chakra.label>\n )\n})\n\nif (__DEV__) {\n Switch.displayName = \"Switch\"\n}\n"],"names":["AppKeyDownloads","memo","props","downloadApprovedStatus","appStatus","isProdOnly","label","color","DownloadApprovedStatus","Approved","NonProdOnly","Unapproved","Declined","ClientApplicationStatus","Inactive","_jsx","Tag","size","variant","colorScheme","textAlign","children","QuestionnaireDisclaimer","topLevelTierSingleName","hideEndorsementWarning","type","rest","_jsxs","Text","QuestionnaireType","AppReadiness","concat","toLocaleLowerCase","AOTooltip","pl","helptext","BsFillQuestionCircleFill","ApiCollapse","textColor","childCount","isOpen","onToggle","useDisclosure","defaultIsOpen","columnCount","useBreakpointValue","base","sm","md","Box","Center","width","Button","onClick","padding","fontSize","fontWeight","ChevronUpIcon","ChevronDownIcon","Collapse","in","animateOpacity","style","overflow","SimpleGrid","columns","Math","min","spacing","paddingTop","ApiLink","api","baseUrl","Flex","justify","AOLink","url","id","display","isExternal","title","name","warning","_Fragment","QuestionIcon","boxProps","pb","marginLeft","CategoryTags","categoryIds","categories","primaryCategoryId","nodes","useMemo","sortedCategories","map","getCategory","filter","x","sort","a","b","localeCompare","tagProps","border","Wrap","marginY","lg","pt","node","borderRadius","undefined","TagLeftIcon","boxSize","as","StarIcon","TagLabel","EditTokensModal","_appDetails$disableIn","onClose","appDetails","setAppDetails","onAccept","appModel","shouldResetFields","setShouldResetFields","useState","useEffect","_appDetails$defaultAc","_appDetails$defaultRe","_appDetails$defaultDi","defaultAccessTokenValidity","defaultRefreshTokenValidity","defaultDisableIndefiniteAccess","setDefaultTokens","accessTokenValidity","refreshTokenValidity","disableIndefiniteAccess","resetTokensToDefault","error","refreshTokensRequired","frontendNoCredentials","consumerType","ConsumerTypes","Backend","isConfidentialClient","credentialsNonRefresh","blurb","isDownloaded","isEpicOnFhirApp","Modal","preserveScrollBarGap","isCentered","returnFocusOnClose","ModalOverlay","ModalContent","ModalHeader","ModalCloseButton","ModalBody","FormControl","isInvalid","FormLabel","Icon","mb","NumberInput","max","MaxIntValue","value","onChange","e","val","Number","isNaN","NumberInputField","hasIndefiniteAccess","isRequired","Switch","isChecked","target","checked","isFocusable","Divider","ModalFooter","ErrorMessage","message","isNotForm","my","Spacer","mr","disabled","_appDetails$disableIn2","FacilitatedAppAgreementButton","_appModel$orgName","headerColor","buttonBackgroundColor","buttonBorderColor","reload","buttonsAs","showAppTermsModal","setShowAppTermsModal","showSuccessModal","setShowSuccessModal","saveError","setSaveError","siteInfo","useSiteInfoState","selectors","getState","isShowroomPublic","isLocalhost","isAdminSite","vendorServicesUrl","getBaseUrl","showroomBaseUrl","vendorName","orgName","appAgreementUrl","agreementId","appAgreementDownloadUrl","handleModalClose","useCallback","requestingAgreementState","requestFacilitatedAgreement","useAsync","requestFacilitatedAppAgreement","executeImmediately","displayName","onSuccess","onFailure","console","log","handleRequestFacilitatedAgreement","setTimeout","appId","handleUseFacilitatedAgreement","handleUseFacilitatedAgreementClicked","isRequesting","isInFlight","UseFacilitatedAgreementButton","GridItem","gridArea","facilitatedAppAgreementRequested","Heading","fontFamily","facilitatedAppAgreementRequestedByUser","facilitatedAppAgreementRequestedOn","galleryTokens","galleryName","isLoading","backgroundColor","AgreementModal","header","mt","termsUrl","downloadTermsUrl","termsAriaLabel","acceptCaption","acceptButtonDownloadsAgreement","onAgree","downloadFileName","skipSigning","additionalDetails","StatusModal","status","closeButtonText","NominateButton","userSecurity","buttonProps","iconColor","excludeIcon","toast","useToast","onOpen","handleSuccess","response","interestedOn","InterestedOn","interestedCount","InterestedCount","description","duration","config","ToastDuration","isClosable","handleFailure","handleNominateApp","nominateApp","handleNominateClicked","_appDetails$appId","computedButtonProps","px","paddingX","iconSpacing","organizationGovernanceUrl","organizationGovernanceMessage","leftIcon","BiHeart","ConfirmationModal","Link","href","onCancel","cancelCaption","NotImplementingNowButtonWrapper","notImplementingNowDetails","nominatedApp","nominations","notNowDecision","MarkNowImplementingNowButton","app","orgId","userOrganizationId","successHandler","failureHandler","buttonAs","buttonText","ShowroomRequestDownloadButton","isShowroom","showAgreementModal","setShowAgreementModal","acceptChecked","setAcceptedChecked","hasAppTerms","hasParticipantTerms","participantTermsId","isAppAgreementFacilitated","participantAgreementUrl","participantAgreementDownloadUrl","handleAcceptChecked","ev","handleRequestDownloadSuccess","Success","Message","requestingDownloadState","requestAppDownload","requestDownload","handleRequestDownload","appTerms","handleParticipantTermsAccepted","handleAppTermsAccepted","handleRequestClicked","buttonTitle","SiteName","isBackend","isOwnApp","organizationId","canDownloadAndActivate","isRelatedOrgApp","isDownloadAvailable","canPurchase","showDownloadLink","isAutoDownloadedClient","requiresFutureEpicVersion","showSection","previousAPILicenseExists","isUSCDIDownloadSet","appCanBeDownloadedWithoutApiLicense","infoText","ownDownloadExists","DownloadButton","hasPotentiallyUnsafeProviderFacingDCR","StatusAlert","onAcceptCheckedChanged","ShowroomUpdateTokensButton","showTokenModal","setShowTokenModal","updateTokenButtonRef","useRef","extras","params","newDetails","handleUpdateClicked","handleUpdate","alignContent","loadingText","ref","vendorApproved","isSyncDisabled","focusOnCloseRef","StageBanner","_stage$backgroundColo","_stage$backgroundColo2","stage","showComingSoon","bannerContents","alignItems","tabIndex","cursor","iconPath","Image","src","fallback","maxH","maxW","VStack","ml","showroomText","whiteSpace","groupName","toLocaleUpperCase","margin","borderTop","comingSoonTitle","background","backgroundColor2","py","PopoverWithHover","popoverContent","dangerouslySetInnerHTML","__html","popoverStyles","bgColor","ShowroomErrorAlert","errorMessage","Alert","flexDirection","justifyContent","AlertIcon","AlertTitle","AlertDescription","maxWidth","createIcon","d","forwardRef","styles","useMultiStyleConfig","_omitThemingProps","omitThemingProps","ownProps","_objectWithoutPropertiesLoose","state","getInputProps","getCheckboxProps","getRootProps","getLabelProps","useCheckbox","containerStyles","React","_extends","verticalAlign","lineHeight","container","trackStyles","flexShrink","boxSizing","track","labelStyles","userSelect","marginStart","chakra","className","cx","__css","span","thumb","dataAttr","isHovered","__DEV__"],"sourceRoot":""}