@spteck/license-manager-react-components 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"license-manager-react-components.cjs.production.min.js","sources":["../src/models/ETabsOptions.ts","../src/constants/constants.ts","../src/components/mailTo/Mailto.tsx","../src/atoms/appGlobalState.ts","../src/hooks/useUtils.ts","../src/components/licenseControl/LicenseControl.tsx","../src/components/licenseControl/useLicenseControlStyles.ts","../src/components/renderHeader/useRenderHeaderStyles.ts","../src/components/renderHeader/RenderHeader.tsx","../src/components/RenderLabel/useRenderLabelStylesStyles.ts","../src/components/RenderLabel/RenderLabel.tsx","../src/components/trialLicense.ts/TrialLicense.tsx","../src/components/trialLicense.ts/useTrialLicenseStyles.ts","../src/components/registerDialog/RegisterDialog.tsx","../src/components/licensePlaceHolder/LicensePlaceHolder.tsx","../src/components/licensePlaceHolder/licensePlaceHolderStyles.tsx","../src/components/informationBar/InformationBar.tsx","../src/components/errorSVG/ErrorSVG.tsx","../src/components/showError/ShowError.tsx","../src/components/licenseProvider/LicenseProvider.tsx"],"sourcesContent":["export enum ETabsOptions {\n Trial = 'trial',\n License = 'license',\n Apps = 'apps',\n} ","export const SUPPORT_EMAIL = \"geral@spteck.com\";\nexport const EMAIL_BODY_TEMPLATE = `Subject: Support Request from {0} {1}\n\nDear Support Team,\n\nI am reaching out to you because I am experiencing issues with my license. Here are my details:\n\n ** Tenant ID **: {2}\n ** Application ID **: {3} - {4}\n ** User First Name **: {5}\n ** User Last Name **: {6}\n ** Email**: {7}\n\n {8}\n\nBest regards,\n{9} {10}`\n\nexport const EMAIL_BODY_TEMPLATE_REQUEST_LICENSE = `Subject: Request for New License {0} {1}\n\nDear Support Team,\n\nI am just contacting you to request a license for the following product. Here are my details:\n\n ** Tenant ID **: {2}\n ** Application ID **: {3} - {4}\n ** User First Name **: {5}\n ** User Last Name **: {6}\n ** Email **: {7}\n\nBest regards,\n{8} {9}`;","import React, { ElementType } from 'react';\n\ninterface MailtoProps<C extends ElementType> {\n to: string; // Required recipient email\n from?: string; // Optional sender email\n subject?: string; // Optional email subject\n body?: string; // Optional email body\n children: React.ReactNode; // Content to be displayed inside the component\n as?: C; // The component type to render\n componentProps?: React.ComponentProps<C>; // Additional props specific to the component type\n \n}\n\nexport const Mailto = <C extends ElementType = \"a\">(props: MailtoProps<C>) => {\n const {\n to,\n from,\n subject,\n body,\n children,\n as: Component,\n componentProps = {} as React.ComponentProps<C>,\n \n } = props;\n // Construct the mailto link\n const mailtoLink = `mailto:${to}?${from ? `from=${encodeURIComponent(from)}&` : \"\"}${\n subject ? `subject=${encodeURIComponent(subject)}&` : \"\"\n }${body ? `body=${encodeURIComponent(body)}` : \"\"}`;\n\n // Ensure the correct element type is rendered\n const RenderedComponent = Component || \"a\";\n\n // Handle the click event\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n window.open(mailtoLink, \"_blank\");\n };\n\n return (\n <RenderedComponent\n href={mailtoLink}\n aria-label={`Send an email to ${to}`}\n onClick={handleClick}\n {...componentProps}\n >\n {children}\n </RenderedComponent>\n );\n};\n","import { atom } from 'jotai';\n\nimport { webLightTheme } from '@fluentui/react-components';\n\nimport stringsLocEn from '../loc/en.json';\nimport { IStrings } from '../loc/IStrings';\nimport { IGlobalState } from '../models/IGlobalState';\n\nexport const appGlobalStateAtom = atom<IGlobalState>({\n theme: webLightTheme,\n language: \"en\" , \n strings: stringsLocEn as unknown as IStrings,\n refresh: false,\n\n\n} as IGlobalState);\n","import React from 'react';\n\nimport { SHA256 } from 'crypto-js';\n\nexport const useUtils = () => {\n const formatString = React.useCallback((template: string, ...args: any[]): string => {\n return template.replace(/{(\\d+)}/g, (match, number) =>\n typeof args[number] !== \"undefined\" ? args[number] : match\n );\n }, []);\n const generateSalt = React.useCallback((tenantId: string, appId: string): string => {\n // Concatenate the inputs with a delimiter\n const inputData = `${tenantId}:${appId}`;\n // Create a SHA-256 hash\n const hash = SHA256(inputData).toString();\n return hash;\n }, []);\n return { formatString, generateSalt };\n};\n","import {\n Button,\n CardFooter,\n Text,\n} from '@fluentui/react-components';\nimport {\n EMAIL_BODY_TEMPLATE,\n EMAIL_BODY_TEMPLATE_REQUEST_LICENSE,\n SUPPORT_EMAIL,\n} from '../../constants/constants';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { Mailto } from '../mailTo/Mailto';\nimport React from 'react';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useLicenseControlStyles } from './useLicenseControlStyles';\nimport { useUtils } from '../../hooks/useUtils';\n\ninterface ILicenseControlProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n onDismiss: () => void;\n}\n\nexport const LicenseControl: React.FC<ILicenseControlProps> = ({\n licenseStatus,\n onDismiss,\n licenseType,\n expiryDate,\n}) => {\n const styles = useLicenseControlStyles();\n const formatDate = new Date(expiryDate as number).toLocaleDateString();\n const appglobalState = useAtomValue(appGlobalStateAtom);\n const { tenantId, applicationId, applicationName, userInformation, strings } = appglobalState;\n const { formatString } = useUtils();\n\n const getMessageAndAction = React.useCallback(() => {\n switch (licenseStatus) {\n case EStatus.blocked:\n return {\n message: formatString(strings.messageStatusBlocked, licenseType),\n actionLabel: \"Contact Support\",\n };\n case EStatus.expired:\n return {\n message: formatString(strings.messageStatusExpired, licenseType, formatDate),\n\n actionLabel: \"Renew License\",\n };\n case EStatus.invalid:\n return {\n message: formatString(strings.messageStatusInvalid, licenseType),\n actionLabel: \"Request New License\",\n };\n case EStatus.notFound:\n return {\n message: strings.messageStatusNotFound,\n actionLabel: \"Request License\",\n };\n case EStatus.genericError:\n return {\n message: formatString(strings.messageStatusGenericError, \"\"),\n actionLabel: \"Contact Support\",\n };\n case EStatus.valid:\n return {\n message: formatString(strings.messageStatusValid, licenseType, formatDate),\n actionLabel: undefined,\n };\n default:\n return undefined;\n }\n }, [licenseStatus]);\n\n let content = React.useMemo(() => getMessageAndAction(), [getMessageAndAction]);\n\n // utils.ts\n const generateBodyText = React.useCallback((): string => {\n const { mail, givenName, surname } = userInformation;\n let body = EMAIL_BODY_TEMPLATE;\n\n if (licenseStatus === EStatus.notFound) {\n body = EMAIL_BODY_TEMPLATE_REQUEST_LICENSE;\n content = {\n actionLabel: \"Request License\",\n message: \"\",\n };\n }\n const message = formatString(\n body,\n givenName,\n surname,\n tenantId,\n applicationId,\n applicationName,\n givenName,\n surname,\n mail,\n content?.message,\n givenName,\n surname\n );\n return message;\n }, [tenantId, applicationId, userInformation, content]);\n\n if (!content) return <></>;\n\n return (\n <div className={styles.container}>\n <Text>{content.message}</Text>\n <CardFooter className={styles.footer}>\n {content.actionLabel && (\n <Mailto\n to={SUPPORT_EMAIL}\n from={userInformation?.mail as string}\n subject={`Support request - ${applicationName}`}\n body={generateBodyText()}\n as={Button}\n componentProps={{\n appearance: \"primary\",\n target: \"_blank\",\n }}\n >\n {content.actionLabel}\n </Mailto>\n )}\n <Button appearance=\"secondary\" onClick={onDismiss}>\n Close\n </Button>\n </CardFooter>\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useLicenseControlStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n padding: 7px;\n background-color: ${tokens.colorNeutralBackground1};\n flex: 1;\n `,\n\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: start;\n `,\n footer : css`\n justify-content: end;\n position: absolute;\n bottom: 20px;\n right: 20px;\n `,\n };\n};","import {\n makeStyles,\n shorthands,\n tokens,\n} from '@fluentui/react-components';\n\nexport const useRenderHeaderStyles = makeStyles({\n closeButton: {\n marginLeft: \"auto\",\n position: \"absolute\",\n top: \"10px\",\n right: \"10px\",\n zIndex: 99999,\n },\n\n divider: {\n width: \"100%\",\n height: \"1px\",\n backgroundColor: tokens.colorNeutralStroke1,\n marginTop: \"6px\",\n },\n\n renderHeaderContent: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"stretch\",\n\n width: \"100%\",\n },\n renderHeaderHeader: {\n \n\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"10px\"),\n gap: \"20px\",\n },\n renderHeaderFooter: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"20px\"),\n gap: \"20px\",\n },\n renderHeaderBody: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"20px\"),\n gap: \"20px\",\n },\n renderHeaderTitleContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n },\n renderHeaderTitle: {\n display: \"-webkit-box\",\n \"-webkit-line-clamp\": \"1\",\n \"-webkit-box-orient\": \"vertical\",\n\n textAlign: \"start\",\n textOverflow: \"ellipsis\",\n wordBreak: \"break-word\",\n },\n renderHeaderDescription: {\n display: \"-webkit-box\",\n \"-webkit-line-clamp\": \"4\",\n \"-webkit-box-orient\": \"vertical\",\n\n textAlign: \"start\",\n textOverflow: \"ellipsis\",\n wordBreak: \"break-word\",\n },\n dialogTitleAndDescriptionContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"start\",\n alignItems: \"start\",\n paddingLeft: \"10px\",\n paddingRight: \"20px\",\n },\n});\n","import * as React from 'react';\n\nimport {\n Button,\n Caption1,\n Subtitle1,\n} from '@fluentui/react-components';\nimport { Dismiss24Regular } from '@fluentui/react-icons';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderHeaderStyles } from './useRenderHeaderStyles';\n\nexport interface IRenderHeaderProps {\n onDismiss: (open?: boolean) => void;\n icon?: string | JSX.Element;\n title: string | React.ReactNode;\n description?: string | React.ReactNode;\n}\n\nexport const RenderHeader: React.FunctionComponent<IRenderHeaderProps> = (\n props: React.PropsWithChildren<IRenderHeaderProps>\n) => {\n const { onDismiss, title, description, icon } = props;\n const styles = useRenderHeaderStyles();\n\n return (\n <>\n <div className={styles.renderHeaderContent}>\n <div\n className={styles.renderHeaderHeader}>\n <Button\n appearance=\"subtle\"\n className={styles.closeButton}\n onClick={(ev: React.MouseEvent<HTMLButtonElement>) => {\n ev.stopPropagation();\n ev.preventDefault();\n onDismiss(false)}}\n icon={<Dismiss24Regular />}\n />\n\n <div className={styles.renderHeaderTitleContainer}>\n {React.isValidElement(icon) ? icon : <Icon icon={icon as string} />}\n <div className={styles.dialogTitleAndDescriptionContainer}>\n {React.isValidElement(title) ? (\n title\n ) : (\n <Subtitle1 className={styles.renderHeaderTitle}>{title}</Subtitle1>\n )}\n {React.isValidElement(description) ? (\n description\n ) : (\n <Caption1 className={styles.renderHeaderDescription}>{description}</Caption1>\n )}\n </div>\n </div>\n </div>\n <div className={styles.divider} />\n </div>\n </>\n );\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n makeStyles,\n shorthands,\n} from '@fluentui/react-components';\n\nexport const useRenderLabelStyles = makeStyles({\n\n labelContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n ...shorthands.gap(\"6px\"),\n },\n iconStyles: {\n width: \"26px\",\n },\n item: {\n paddingLeft: \"15px\",\n },\n \n\n});\n","import * as React from 'react';\n\nimport {\n Caption1,\n tokens,\n} from '@fluentui/react-components';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderLabelStyles } from './useRenderLabelStylesStyles';\n\nexport interface IRenderLabelProps {\n label: string; icon?: string | JSX.Element; isRequired?: boolean\n}\n\nexport const RenderLabel: React.FunctionComponent<IRenderLabelProps> = (props: React.PropsWithChildren<IRenderLabelProps>) => {\n const { label, icon, isRequired } = props;\n const styles = useRenderLabelStyles();\n return (\n <>\n <div className={styles.labelContainer}>\n {icon && React.isValidElement(icon) ? (\n icon\n ) : (\n <Icon\n icon={icon as string}\n className={styles.iconStyles}\n width={\"20px\"}\n height={\"20px\"}\n color={tokens.colorBrandForeground1}\n />\n )}\n <Caption1 style={{ color: tokens.colorBrandForeground1 }}>{label}</Caption1>\n <Caption1 style={{ color: tokens.colorPaletteRedForeground1 }}>{isRequired ? \" *\" : \"\"}</Caption1>\n </div>\n </>\n );\n};\n\nexport default RenderLabel;\n","import * as React from 'react';\n\nimport {\n Body1,\n Body1Strong,\n Button,\n CardFooter,\n Field,\n Input,\n MessageBar,\n} from '@fluentui/react-components';\n\nimport { RenderLabel } from '../RenderLabel';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useLicenseManager } from '@spteck/react-hooks-library';\nimport { useStyles } from './useTrialLicenseStyles';\nimport { useUtils } from '../../hooks/useUtils';\nimport { z } from 'zod';\n\nexport interface ITrialLicenseProps {\n onTrialLicenseAdded: () => void;\n onDismiss: () => void;\n}\n\nexport const TrialLicense: React.FunctionComponent<ITrialLicenseProps> = (\n props: React.PropsWithChildren<ITrialLicenseProps>\n) => {\n const [errors, setErrors] = React.useState<{ [key: string]: string | null }>({});\n const { onTrialLicenseAdded, onDismiss } = props;\n const appGlobalState = useAtomValue(appGlobalStateAtom);\n const { userInformation, strings, tenantId, context } = appGlobalState;\n const { generateSalt } = useUtils();\n const [error, setError] = React.useState<Error | undefined>(undefined);\n\n const { requestTrialLicense } = useLicenseManager(\n tenantId as string,\n context?.manifest.id as string,\n generateSalt(tenantId as string, context?.manifest.id as string),\n context\n ) as any;\n\n // Define Zod schema for validation\n const trialLicenseSchema = z.object({\n contactFirstName: z.string().min(1, strings.contactFirstNameError),\n contactLastName: z.string().min(1, strings.contactLastNameError),\n contactEmail: z.string().email(strings.contactEmailError),\n contactCompany: z.string().min(1, strings.contactCompanyError),\n });\n\n const [formData, setFormData] = React.useState({\n contactFirstName: userInformation?.givenName as string,\n contactLastName: userInformation?.surname as string,\n contactEmail: userInformation?.mail as string,\n contactCompany: \"\",\n });\n\n const handleInputChange = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n const styles = useStyles();\n\n const handleSubmit = React.useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n // Validate form data using Zod schema\n const validation = trialLicenseSchema.safeParse(formData);\n if (!validation.success) {\n // Map errors for display\n const fieldErrors: { [key: string]: string } = {};\n validation.error.errors.forEach((error) => {\n const fieldName = error.path[0] as string;\n fieldErrors[fieldName] = error.message;\n });\n setErrors(fieldErrors);\n } else {\n // Clear errors and call the parent function\n setErrors({});\n try {\n await requestTrialLicense(\n tenantId as string,\n context.manifest.id as string,\n formData.contactFirstName,\n formData.contactLastName,\n formData.contactEmail,\n formData.contactCompany\n );\n onTrialLicenseAdded();\n } catch (error) {\n console.error(error);\n setError(error as Error);\n }\n }\n },\n [formData, onTrialLicenseAdded]\n );\n\n return (\n <div className={styles.container}>\n <div>\n <Body1Strong className={styles.title}>{strings.trialLicenseTitle}</Body1Strong>\n <Body1>{strings.trialLicenseText}</Body1>\n </div>\n\n <>\n <Field\n label={<RenderLabel label={strings.firstName} isRequired />}\n validationState={errors.contactFirstName ? \"error\" : \"none\"}\n validationMessage={errors.contactFirstName || undefined}\n >\n <Input\n name=\"contactFirstName\"\n value={formData.contactFirstName}\n onChange={handleInputChange}\n placeholder={strings.firstNamePlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.lastName} isRequired />}\n validationState={errors.contactLastName ? \"error\" : \"none\"}\n validationMessage={errors.contactLastName || undefined}\n >\n <Input\n name=\"contactLastName\"\n value={formData.contactLastName}\n onChange={handleInputChange}\n placeholder={strings.lastNamePlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.email} isRequired />}\n validationState={errors.contactEmail ? \"error\" : \"none\"}\n validationMessage={errors.contactEmail || undefined}\n >\n <Input\n name=\"contactEmail\"\n value={formData.contactEmail}\n onChange={handleInputChange}\n placeholder={strings.emailPlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.company} isRequired />}\n validationState={errors.contactCompany ? \"error\" : \"none\"}\n validationMessage={errors.contactCompany || undefined}\n >\n <Input\n name=\"contactCompany\"\n value={formData.contactCompany}\n onChange={handleInputChange}\n placeholder={strings.companyPlaceholder}\n />\n </Field>\n {error && (\n <MessageBar style={{ marginTop: 10, marginBottom: 10 }} intent=\"error\">\n {\" \"}\n {error.message}\n </MessageBar>\n )}\n <CardFooter className={styles.cardFooter}>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {strings.register}\n </Button>\n <Button appearance=\"secondary\" onClick={onDismiss}>\n {strings.cancel}\n </Button>\n </CardFooter>\n </>\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n padding: 7px;\n background-color: ${tokens.colorNeutralBackground1};\n `,\n\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: start;\n `,\n cardFooter : css`\n align-self: flex-end;\n margin-top: 15px;\n `,\n };\n};\n","import {\n Apps20Regular,\n Clock20Regular,\n Key20Regular,\n} from '@fluentui/react-icons';\nimport {\n Dialog,\n DialogActions,\n DialogSurface,\n DialogTitle,\n FluentProvider,\n SelectTabData,\n SelectTabEvent,\n Tab,\n TabList,\n TabValue,\n} from '@fluentui/react-components';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { ETabsOptions } from '../../models/ETabsOptions';\nimport { LicenseControl } from '../licenseControl/LicenseControl';\nimport React from 'react';\nimport { RenderHeader } from '../renderHeader';\nimport { TrialLicense } from '../trialLicense.ts/TrialLicense';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtom } from 'jotai';\n\nexport interface IRegisterDialogProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n open: boolean;\n onDismiss: (update?: boolean) => void;\n}\n\ninterface ITab {\n id: string;\n value: string;\n label: string;\n icon: JSX.Element;\n}\n\nexport const RegisterDialog: React.FC<IRegisterDialogProps> = (props: IRegisterDialogProps) => {\n const { licenseStatus, open, onDismiss, licenseType, expiryDate } = props;\n const [appGlobalState, setAppGlobalState] = useAtom(appGlobalStateAtom);\n const { theme, applicationName, applicationIcon, strings, showApps = false } = appGlobalState;\n\n const [selectedValue, setSelectedValue] = React.useState<TabValue>(\"trial\");\n\n const tabs: ITab[] = React.useMemo(() => {\n const defaultTabs = [\n { id: \"trial\", value: \"trial\", label: strings.trial, icon: <Clock20Regular /> },\n { id: \"license\", value: \"license\", label: strings.license, icon: <Key20Regular /> },\n ];\n if (showApps) {\n tabs.push({ id: \"apps\", value: \"apps\", label: strings.apps, icon: <Apps20Regular /> });\n }\n return defaultTabs;\n }, [strings]);\n\n const onTabSelect = React.useCallback((_event: SelectTabEvent, data: SelectTabData) => {\n setSelectedValue(data.value);\n }, []);\n\n React.useEffect(() => {\n const statusToTab = {\n [EStatus.notFound]: ETabsOptions.Trial,\n [EStatus.expired]: ETabsOptions.License,\n [EStatus.invalid]: ETabsOptions.License,\n [EStatus.blocked]: ETabsOptions.License,\n [EStatus.genericError]: ETabsOptions.License,\n [EStatus.valid]: ETabsOptions.License,\n };\n setSelectedValue(statusToTab[licenseStatus] || ETabsOptions.Trial);\n }, [licenseStatus]);\n\n const renderPanel = React.useMemo((): JSX.Element => {\n switch (selectedValue) {\n case \"trial\":\n return (\n <TrialLicense\n onTrialLicenseAdded={() => {\n setAppGlobalState({ ...appGlobalState, refresh: true });\n onDismiss();\n }}\n onDismiss={onDismiss}\n />\n );\n case \"license\":\n return (\n <LicenseControl\n licenseStatus={licenseStatus}\n onDismiss={onDismiss}\n licenseType={licenseType}\n expiryDate={expiryDate}\n />\n );\n case \"apps\":\n return <div>Apps</div>;\n default:\n return <></>;\n }\n }, [selectedValue, licenseStatus, licenseType, expiryDate]);\n\n const filterTabs = React.useCallback(\n (tab: ITab) => {\n if (\n licenseType?.toLocaleLowerCase() === ETabsOptions.Trial.toLocaleLowerCase() ||\n licenseStatus.toLocaleLowerCase() === EStatus.genericError.toLocaleLowerCase()\n ) {\n return tab.id.toLocaleLowerCase() !== ETabsOptions.Trial.toLocaleLowerCase();\n }\n return true;\n },\n [licenseType, licenseStatus]\n );\n\n return (\n <FluentProvider theme={theme}>\n <Dialog open={open} modalType=\"modal\">\n <DialogSurface style={{ minHeight: 300 }}>\n <DialogTitle>\n <RenderHeader icon={applicationIcon} title={applicationName} onDismiss={onDismiss} />\n </DialogTitle>\n\n <TabList selectedValue={selectedValue} onTabSelect={onTabSelect} selectTabOnFocus={true} size=\"medium\">\n {tabs.filter(filterTabs).map((tab) => (\n <Tab key={tab.id} value={tab.value} icon={tab.icon}>\n {tab.label}\n </Tab>\n ))}\n </TabList>\n {renderPanel}\n <DialogActions></DialogActions>\n </DialogSurface>\n </Dialog>\n </FluentProvider>\n );\n};\n","import * as React from 'react';\n\nimport {\n Body1,\n Body1Strong,\n Button,\n DialogActions,\n FluentProvider,\n Subtitle1,\n} from '@fluentui/react-components';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { RegisterDialog } from '../registerDialog/RegisterDialog';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useStyles } from './licensePlaceHolderStyles';\nimport { useUtils } from '../../hooks/useUtils';\n\nexport interface ILicensePlaceHolderProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n}\n\nexport const LicensePlaceHolder: React.FunctionComponent<ILicensePlaceHolderProps> = (\n props: React.PropsWithChildren<ILicensePlaceHolderProps>\n) => {\n const appglobalState = useAtomValue(appGlobalStateAtom);\n const { theme, applicationName, applicationIcon, placeHolderText, strings } = appglobalState;\n const styles = useStyles();\n const [isOpenLicenseForm, setIsOpenLicenseForm] = React.useState<boolean>(false);\n const { licenseStatus, licenseType, expiryDate } = props;\n const { formatString } = useUtils();\n const onDissmiss = React.useCallback(() => {\n setIsOpenLicenseForm(false);\n }, []);\n\n const formatDate = React.useMemo(() => new Date(expiryDate as number).toLocaleDateString(), [expiryDate]);\n\n const getMessageAndAction = React.useCallback(() => {\n switch (licenseStatus) {\n case EStatus.blocked:\n return {\n message: formatString(strings.messageStatusBlockedShort, licenseType),\n actionLabel: strings.details,\n };\n case EStatus.expired:\n return {\n message: formatString(strings.messageStatusExpiredShort, licenseType, formatDate),\n actionLabel: strings.buyLicense,\n };\n case EStatus.invalid:\n return {\n message: formatString(strings.messageStatusInvalidShort, licenseType ?? \"\"),\n actionLabel: strings.details,\n };\n case EStatus.notFound:\n return {\n message: formatString(strings.messageStatusNotFoundShort),\n actionLabel: strings.requestLicense,\n };\n case EStatus.genericError:\n return {\n message: formatString(strings.messageStatusGenericErrorShort, licenseType ?? \"\"),\n actionLabel: strings.details,\n };\n default:\n return undefined;\n }\n }, [licenseStatus]);\n\n const content = React.useMemo(() => {\n return getMessageAndAction();\n }, [getMessageAndAction]);\n\n return (\n <>\n <FluentProvider theme={theme}>\n <div className={styles.informationPanel}>\n <div className={styles.infoRow}>\n <div className={styles.title}>\n <div className={styles.titleContainer}>\n <div className={styles.titleAndIcon}>\n {applicationIcon} <Subtitle1> {applicationName}</Subtitle1>{\" \"}\n </div>\n <Body1>{placeHolderText}</Body1>\n </div>\n </div>\n </div>\n <div className={styles.infoRow}>\n <Body1Strong> {content?.message}</Body1Strong>\n </div>\n <div className={styles.infoRow}>\n <DialogActions style={{ marginTop: 15 }}>\n <Button\n appearance=\"primary\"\n onClick={() => {\n setIsOpenLicenseForm(true);\n }}\n >\n {content?.actionLabel}\n </Button>\n </DialogActions>\n {isOpenLicenseForm && (\n <RegisterDialog\n licenseStatus={licenseStatus}\n licenseType={licenseType}\n expiryDate={expiryDate}\n open={isOpenLicenseForm}\n onDismiss={onDissmiss}\n />\n )}\n </div>\n </div>\n </FluentProvider>\n </>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const \n useStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n margin-bottom: 30px;\n `,\n titleContainer: css`\n display: flex;\n flex-direction: column;\n width: 100%;\n justify-content: center;\n align-items: center;\n gap: 10px;\n `,\n titleAndIcon: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n `,\n informationPanel: css`\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n background-color: ${tokens.colorNeutralBackground3};\n `,\n infoRow: css`\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n width: 100%;\n `,\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n `,\n };\n};","import * as React from 'react';\n\nimport {\n Button,\n MessageBar,\n MessageBarActions,\n MessageBarBody,\n MessageBarTitle,\n} from '@fluentui/react-components';\n\nexport interface IInformationBarProps {\n message: JSX.Element | string;\n onAction?: () => void;\n}\n\nexport const InformationBar: React.FunctionComponent<IInformationBarProps> = (\n props: React.PropsWithChildren<IInformationBarProps>\n) => {\n const { message, onAction } = props;\n return (\n <>\n <MessageBar intent={\"warning\"}>\n <MessageBarBody>\n <MessageBarTitle>License Manager</MessageBarTitle>\n {message}\n </MessageBarBody>\n <MessageBarActions>\n <Button onClick={onAction}>Details</Button>\n </MessageBarActions>\n </MessageBar>\n </>\n );\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React from \"react\";\nimport type { SVGProps } from \"react\";\n\nexport function ErrorIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <g fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path d=\"M2 6.95c0-.883 0-1.324.07-1.692A4 4 0 0 1 5.257 2.07C5.626 2 6.068 2 6.95 2c.386 0 .58 0 .766.017a4 4 0 0 1 2.18.904c.144.119.28.255.554.529L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .848.352C14.098 6 14.675 6 15.828 6h.374c2.632 0 3.949 0 4.804.77q.119.105.224.224c.77.855.77 2.172.77 4.804V14c0 3.771 0 5.657-1.172 6.828S17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.172S2 17.771 2 14z\" />\n <path strokeLinecap=\"round\" d=\"m10.5 15l3-3m0 3l-3-3\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { css } from '@emotion/css';\nimport {\n Body1Strong,\n shorthands,\n Subtitle1,\n tokens,\n} from '@fluentui/react-components';\n\nimport { ErrorIcon } from '../errorSVG/ErrorSVG';\n\ninterface IErrorDisplayProps {\n message: string;\n}\n\nconst styles = {\n container: css({\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n textAlign: \"center\",\n backgroundColor: tokens.colorNeutralBackground2,\n borderRadius: tokens.borderRadiusMedium,\n ...shorthands.padding(tokens.spacingVerticalXL, tokens.spacingHorizontalXL),\n color: tokens.colorNeutralForeground1,\n }),\n icon: css({\n marginTop: tokens.spacingHorizontalXL,\n fontSize: \"50px\",\n marginBottom: tokens.spacingHorizontalXL,\n color: tokens.colorBrandBackground,\n }),\n message: css({\n marginBottom: tokens.spacingHorizontalXL,\n }),\n};\n\nexport const ShowError: React.FC<IErrorDisplayProps> = ({ message }) => {\n return (\n <div className={styles.container}>\n <Subtitle1>News Feed - Application</Subtitle1>\n <ErrorIcon className={styles.icon} />\n <Body1Strong className={styles.message}>{message}</Body1Strong>\n </div>\n );\n};\n\nexport default ShowError;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\n\nimport {\n EStatus,\n ICheckAndUpdateLicesingResponse,\n useLicenseManager,\n useUser,\n} from '@spteck/react-hooks-library';\nimport {\n FluentProvider,\n IdPrefixProvider,\n teamsLightTheme,\n} from '@fluentui/react-components';\n\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { IGlobalState } from '../../models/IGlobalState';\nimport { ILicenseProviderProps } from './ILicenseProviderProps';\nimport { InformationBar } from '../informationBar/InformationBar';\nimport { LicensePlaceHolder } from '../licensePlaceHolder/LicensePlaceHolder';\nimport { RegisterDialog } from '../registerDialog/RegisterDialog';\nimport ShowError from '../showError/ShowError';\nimport { User } from '@microsoft/microsoft-graph-types';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { css } from '@emotion/css';\nimport { differenceInDays } from 'date-fns';\nimport { useAtom } from 'jotai';\nimport { useUtils } from '../../hooks/useUtils';\n\nconst NUMBER_DAYS_WARNING = 30;\n\nexport const LicenseProvider: React.FunctionComponent<ILicenseProviderProps> = (\n props: React.PropsWithChildren<ILicenseProviderProps>\n) => {\n const { theme = teamsLightTheme, context, children, tenantId, language = \"en\", applicationId } = props;\n\n /* const instanceId = context?.instanceId as string;\n const tenantId = context?.pageContext.legacyPageContext.aadTenantId; */\n const [error, setError] = React.useState<Error | undefined>(undefined);\n const [isLoading, setIsLoading] = React.useState<boolean>(true);\n const [licensingResponse, setLicenseResponse] = React.useState<ICheckAndUpdateLicesingResponse>();\n const [appglobalState, setAppGlobalState] = useAtom<IGlobalState>(appGlobalStateAtom);\n const { userInformation } = useUser(context);\n const [isOpenRegisterDialog, setIsOpenRegisterDialog] = React.useState<boolean>(false);\n const { formatString } = useUtils();\n const { strings, refresh } = appglobalState;\n const { generateSalt } = useUtils();\n const { status, licenseType, expiryDate } = (licensingResponse as ICheckAndUpdateLicesingResponse) || {};\n\n const { checkAndUpdateLicensing } = useLicenseManager(\n tenantId as string,\n applicationId as string, \n generateSalt(tenantId as string, applicationId as string),\n context\n ) as any;\n\n const styles = React.useMemo(() => {\n return {\n root: css({\n backgroundColor: \"transparent\",\n padding: 20,\n }),\n };\n }, []);\n\n React.useEffect(() => {\n (async () => {\n try {\n const stringsLoc = await import(`./loc/${language}.json`);\n setAppGlobalState((prev) => ({\n ...prev,\n ...props,\n strings: stringsLoc,\n userInformation: userInformation as User,\n }));\n const result = await checkAndUpdateLicensing();\n setLicenseResponse(result);\n setIsLoading(false);\n } catch (error) {\n if (error instanceof Error) setError(error);\n setIsLoading(false);\n }\n })();\n }, [userInformation]);\n\n const fallbackRender = React.useCallback(({ error }: { error: Error }) => {\n console.error(`[LicenseManager:Error: ${error.message}`);\n return <ShowError message={error.message} />;\n }, []);\n\n const onMessageBarAction = React.useCallback(() => {\n setIsOpenRegisterDialog(true);\n }, []);\n\n // ipdate liecense status on refresh\n React.useEffect(() => {\n (async () => {\n try {\n setAppGlobalState((prev) => ({\n ...prev,\n refresh: false,\n }));\n const result = await checkAndUpdateLicensing();\n setLicenseResponse(result);\n setIsLoading(false);\n } catch (error) {\n if (error instanceof Error) setError(error);\n setIsLoading(false);\n }\n })();\n }, [refresh]);\n\n const onDissmiss = React.useCallback(() => {\n setIsOpenRegisterDialog(false);\n }, []);\n\n // renderMessagebar if the license is about to expire\n const renderMessagebar = React.useCallback(\n (licenseType: string, expiryDate: number, warningDays: number): JSX.Element => {\n const expirationDate = new Date(expiryDate);\n const today = new Date();\n const formatedExpiredDate = expirationDate.toLocaleDateString();\n const dayDiff = differenceInDays(expirationDate, today);\n let message = \"\";\n if (dayDiff <= warningDays) {\n message = formatString(strings.messageLicenseWarning, licenseType, dayDiff, formatedExpiredDate);\n return <InformationBar message={message} onAction={onMessageBarAction} />;\n }\n return <></>;\n },\n [expiryDate]\n );\n\n // render the control based on the license status\n const renderContent = React.useCallback((): JSX.Element => {\n switch (status) {\n case EStatus.valid:\n return (\n <>\n {renderMessagebar(licenseType as string, expiryDate as number, NUMBER_DAYS_WARNING)}\n {children}\n </>\n );\n case EStatus.genericError:\n case EStatus.notFound:\n case EStatus.blocked:\n case EStatus.expired:\n case EStatus.invalid:\n return <LicensePlaceHolder licenseStatus={status} licenseType={licenseType} expiryDate={expiryDate} />;\n default:\n break;\n }\n return <></>;\n }, [licensingResponse, refresh]);\n\n if (isLoading) return null;\n if (error) return <ShowError message={error.message} />;\n\n return (\n <>\n <IdPrefixProvider value=\"news-feed-\">\n <FluentProvider theme={theme} className={styles.root}>\n <ErrorBoundary fallbackRender={fallbackRender}>\n {renderContent()}\n {isOpenRegisterDialog && (\n <RegisterDialog\n licenseStatus={status}\n licenseType={licenseType}\n expiryDate={expiryDate}\n open={isOpenRegisterDialog}\n onDismiss={onDissmiss}\n />\n )}\n </ErrorBoundary>\n </FluentProvider>\n </IdPrefixProvider>\n </>\n );\n};\n"],"names":["ETabsOptions","Mailto","props","to","from","subject","body","children","Component","as","_props$componentProps","componentProps","mailtoLink","encodeURIComponent","React","href","onClick","e","preventDefault","window","open","appGlobalStateAtom","atom","theme","webLightTheme","language","strings","refresh","useUtils","formatString","useCallback","template","args","Array","_len","_key","arguments","replace","match","number","generateSalt","tenantId","appId","SHA256","toString","LicenseControl","_ref","licenseStatus","onDismiss","licenseType","expiryDate","styles","container","css","_templateObject","_taggedTemplateLiteralLoose","tokens","colorNeutralBackground1","title","_templateObject2","footer","_templateObject3","formatDate","Date","toLocaleDateString","appglobalState","useAtomValue","applicationId","applicationName","userInformation","getMessageAndAction","EStatus","blocked","message","messageStatusBlocked","actionLabel","expired","messageStatusExpired","invalid","messageStatusInvalid","notFound","messageStatusNotFound","genericError","messageStatusGenericError","valid","messageStatusValid","undefined","content","useMemo","generateBodyText","givenName","surname","mail","_content","className","Text","CardFooter","Button","appearance","target","useRenderHeaderStyles","makeStyles","closeButton","marginLeft","position","top","right","zIndex","divider","width","height","backgroundColor","colorNeutralStroke1","marginTop","renderHeaderContent","display","flexDirection","justifyContent","alignItems","renderHeaderHeader","_extends","shorthands","padding","gap","renderHeaderFooter","renderHeaderBody","renderHeaderTitleContainer","renderHeaderTitle","-webkit-line-clamp","-webkit-box-orient","textAlign","textOverflow","wordBreak","renderHeaderDescription","dialogTitleAndDescriptionContainer","paddingLeft","paddingRight","RenderHeader","description","icon","ev","stopPropagation","Dismiss24Regular","Icon","Subtitle1","Caption1","useRenderLabelStyles","labelContainer","iconStyles","item","RenderLabel","label","isRequired","color","colorBrandForeground1","style","colorPaletteRedForeground1","TrialLicense","_React$useState","errors","setErrors","onTrialLicenseAdded","appGlobalState","context","_React$useState2","error","setError","requestTrialLicense","useLicenseManager","manifest","id","trialLicenseSchema","z","object","contactFirstName","string","min","contactFirstNameError","contactLastName","contactLastNameError","contactEmail","email","contactEmailError","contactCompany","contactCompanyError","_React$useState3","formData","setFormData","handleInputChange","_e$target","name","value","prev","_extends2","cardFooter","handleSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","validation","fieldErrors","wrap","_context","next","safeParse","success","forEach","path","t0","console","stop","_x","apply","Body1Strong","trialLicenseTitle","Body1","trialLicenseText","Field","firstName","validationState","validationMessage","Input","onChange","placeholder","firstNamePlaceholder","lastName","lastNamePlaceholder","emailPlaceholder","company","companyPlaceholder","MessageBar","marginBottom","intent","register","cancel","RegisterDialog","_useAtom","useAtom","setAppGlobalState","applicationIcon","_appGlobalState$showA","showApps","useState","selectedValue","setSelectedValue","tabs","defaultTabs","trial","Clock20Regular","license","Key20Regular","push","apps","Apps20Regular","onTabSelect","_event","data","useEffect","statusToTab","_statusToTab","Trial","License","renderPanel","filterTabs","tab","toLocaleLowerCase","FluentProvider","Dialog","modalType","DialogSurface","minHeight","DialogTitle","TabList","selectTabOnFocus","size","filter","map","Tab","key","DialogActions","LicensePlaceHolder","placeHolderText","titleContainer","titleAndIcon","informationPanel","_templateObject4","colorNeutralBackground3","infoRow","_templateObject5","_templateObject6","isOpenLicenseForm","setIsOpenLicenseForm","onDissmiss","messageStatusBlockedShort","details","messageStatusExpiredShort","buyLicense","messageStatusInvalidShort","messageStatusNotFoundShort","requestLicense","messageStatusGenericErrorShort","InformationBar","onAction","MessageBarBody","MessageBarTitle","MessageBarActions","ErrorIcon","xmlns","viewBox","fill","stroke","strokeWidth","d","strokeLinecap","colorNeutralBackground2","borderRadius","borderRadiusMedium","spacingVerticalXL","spacingHorizontalXL","colorNeutralForeground1","fontSize","colorBrandBackground","ShowError","_props$theme","teamsLightTheme","_props$language","isLoading","setIsLoading","licensingResponse","setLicenseResponse","useUser","_React$useState4","isOpenRegisterDialog","setIsOpenRegisterDialog","_useUtils2","status","checkAndUpdateLicensing","root","stringsLoc","sent","Error","fallbackRender","_ref3","onMessageBarAction","_callee2","_context2","renderMessagebar","warningDays","expirationDate","today","formatedExpiredDate","dayDiff","differenceInDays","messageLicenseWarning","renderContent","IdPrefixProvider","ErrorBoundary"],"mappings":"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"}
1
+ {"version":3,"file":"license-manager-react-components.cjs.production.min.js","sources":["../src/models/ETabsOptions.ts","../src/constants/constants.ts","../src/components/mailTo/Mailto.tsx","../src/atoms/appGlobalState.ts","../src/hooks/useUtils.ts","../src/components/licenseControl/LicenseControl.tsx","../src/components/licenseControl/useLicenseControlStyles.ts","../src/components/renderHeader/useRenderHeaderStyles.ts","../src/components/renderHeader/RenderHeader.tsx","../src/components/RenderLabel/useRenderLabelStylesStyles.ts","../src/components/RenderLabel/RenderLabel.tsx","../src/components/trialLicense.ts/TrialLicense.tsx","../src/components/trialLicense.ts/useTrialLicenseStyles.ts","../src/components/registerDialog/RegisterDialog.tsx","../src/components/licensePlaceHolder/LicensePlaceHolder.tsx","../src/components/licensePlaceHolder/licensePlaceHolderStyles.tsx","../src/components/informationBar/InformationBar.tsx","../src/components/errorSVG/ErrorSVG.tsx","../src/components/showError/ShowError.tsx","../src/components/licenseProvider/LicenseProvider.tsx"],"sourcesContent":["export enum ETabsOptions {\n Trial = 'trial',\n License = 'license',\n Apps = 'apps',\n} ","export const SUPPORT_EMAIL = \"geral@spteck.com\";\nexport const EMAIL_BODY_TEMPLATE = `Subject: Support Request from {0} {1}\n\nDear Support Team,\n\nI am reaching out to you because I am experiencing issues with my license. Here are my details:\n\n ** Tenant ID **: {2}\n ** Application ID **: {3} - {4}\n ** User First Name **: {5}\n ** User Last Name **: {6}\n ** Email**: {7}\n\n {8}\n\nBest regards,\n{9} {10}`\n\nexport const EMAIL_BODY_TEMPLATE_REQUEST_LICENSE = `Subject: Request for New License {0} {1}\n\nDear Support Team,\n\nI am just contacting you to request a license for the following product. Here are my details:\n\n ** Tenant ID **: {2}\n ** Application ID **: {3} - {4}\n ** User First Name **: {5}\n ** User Last Name **: {6}\n ** Email **: {7}\n\nBest regards,\n{8} {9}`;","import React, { ElementType } from 'react';\n\ninterface MailtoProps<C extends ElementType> {\n to: string; // Required recipient email\n from?: string; // Optional sender email\n subject?: string; // Optional email subject\n body?: string; // Optional email body\n children: React.ReactNode; // Content to be displayed inside the component\n as?: C; // The component type to render\n componentProps?: React.ComponentProps<C>; // Additional props specific to the component type\n \n}\n\nexport const Mailto = <C extends ElementType = \"a\">(props: MailtoProps<C>) => {\n const {\n to,\n from,\n subject,\n body,\n children,\n as: Component,\n componentProps = {} as React.ComponentProps<C>,\n \n } = props;\n // Construct the mailto link\n const mailtoLink = `mailto:${to}?${from ? `from=${encodeURIComponent(from)}&` : \"\"}${\n subject ? `subject=${encodeURIComponent(subject)}&` : \"\"\n }${body ? `body=${encodeURIComponent(body)}` : \"\"}`;\n\n // Ensure the correct element type is rendered\n const RenderedComponent = Component || \"a\";\n\n // Handle the click event\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n window.open(mailtoLink, \"_blank\");\n };\n\n return (\n <RenderedComponent\n href={mailtoLink}\n aria-label={`Send an email to ${to}`}\n onClick={handleClick}\n {...componentProps}\n >\n {children}\n </RenderedComponent>\n );\n};\n","import { atom } from 'jotai';\n\nimport { webLightTheme } from '@fluentui/react-components';\n\nimport stringsLocEn from '../loc/en.json';\nimport { IStrings } from '../loc/IStrings';\nimport { IGlobalState } from '../models/IGlobalState';\n\nexport const appGlobalStateAtom = atom<IGlobalState>({\n theme: webLightTheme,\n language: \"en\" , \n strings: stringsLocEn as unknown as IStrings,\n refresh: false,\n\n\n} as IGlobalState);\n","import React from 'react';\n\nimport { SHA256 } from 'crypto-js';\n\nexport const useUtils = () => {\n const formatString = React.useCallback((template: string, ...args: any[]): string => {\n return template.replace(/{(\\d+)}/g, (match, number) =>\n typeof args[number] !== \"undefined\" ? args[number] : match\n );\n }, []);\n const generateSalt = React.useCallback((tenantId: string, appId: string): string => {\n // Concatenate the inputs with a delimiter\n const inputData = `${tenantId}:${appId}`;\n // Create a SHA-256 hash\n const hash = SHA256(inputData).toString();\n return hash;\n }, []);\n return { formatString, generateSalt };\n};\n","import {\n Button,\n CardFooter,\n Text,\n} from '@fluentui/react-components';\nimport {\n EMAIL_BODY_TEMPLATE,\n EMAIL_BODY_TEMPLATE_REQUEST_LICENSE,\n SUPPORT_EMAIL,\n} from '../../constants/constants';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { Mailto } from '../mailTo/Mailto';\nimport React from 'react';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useLicenseControlStyles } from './useLicenseControlStyles';\nimport { useUtils } from '../../hooks/useUtils';\n\ninterface ILicenseControlProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n onDismiss: () => void;\n}\n\nexport const LicenseControl: React.FC<ILicenseControlProps> = ({\n licenseStatus,\n onDismiss,\n licenseType,\n expiryDate,\n}) => {\n const styles = useLicenseControlStyles();\n const formatDate = new Date(expiryDate as number).toLocaleDateString();\n const appglobalState = useAtomValue(appGlobalStateAtom);\n const { tenantId, applicationId, applicationName, userInformation, strings } = appglobalState;\n const { formatString } = useUtils();\n\n const getMessageAndAction = React.useCallback(() => {\n switch (licenseStatus) {\n case EStatus.blocked:\n return {\n message: formatString(strings.messageStatusBlocked, licenseType),\n actionLabel: \"Contact Support\",\n };\n case EStatus.expired:\n return {\n message: formatString(strings.messageStatusExpired, licenseType, formatDate),\n\n actionLabel: \"Renew License\",\n };\n case EStatus.invalid:\n return {\n message: formatString(strings.messageStatusInvalid, licenseType),\n actionLabel: \"Request New License\",\n };\n case EStatus.notFound:\n return {\n message: strings.messageStatusNotFound,\n actionLabel: \"Request License\",\n };\n case EStatus.genericError:\n return {\n message: formatString(strings.messageStatusGenericError, \"\"),\n actionLabel: \"Contact Support\",\n };\n case EStatus.valid:\n return {\n message: formatString(strings.messageStatusValid, licenseType, formatDate),\n actionLabel: undefined,\n };\n default:\n return undefined;\n }\n }, [licenseStatus]);\n\n let content = React.useMemo(() => getMessageAndAction(), [getMessageAndAction]);\n\n // utils.ts\n const generateBodyText = React.useCallback((): string => {\n const { mail, givenName, surname } = userInformation || {};\n let body = EMAIL_BODY_TEMPLATE;\n\n if (licenseStatus === EStatus.notFound) {\n body = EMAIL_BODY_TEMPLATE_REQUEST_LICENSE;\n content = {\n actionLabel: \"Request License\",\n message: \"\",\n };\n }\n const message = formatString(\n body,\n givenName,\n surname,\n tenantId,\n applicationId,\n applicationName,\n givenName,\n surname,\n mail,\n content?.message,\n givenName,\n surname\n );\n return message;\n }, [tenantId, applicationId, userInformation, content]);\n\n if (!content) return <></>;\n\n return (\n <div className={styles.container}>\n <Text>{content.message}</Text>\n <CardFooter className={styles.footer}>\n {content.actionLabel && (\n <Mailto\n to={SUPPORT_EMAIL}\n from={userInformation?.mail as string}\n subject={`Support request - ${applicationName}`}\n body={generateBodyText()}\n as={Button}\n componentProps={{\n appearance: \"primary\",\n target: \"_blank\",\n }}\n >\n {content.actionLabel}\n </Mailto>\n )}\n <Button appearance=\"secondary\" onClick={onDismiss}>\n Close\n </Button>\n </CardFooter>\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useLicenseControlStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n padding: 7px;\n background-color: ${tokens.colorNeutralBackground1};\n flex: 1;\n `,\n\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: start;\n `,\n footer : css`\n justify-content: end;\n position: absolute;\n bottom: 20px;\n right: 20px;\n `,\n };\n};","import {\n makeStyles,\n shorthands,\n tokens,\n} from '@fluentui/react-components';\n\nexport const useRenderHeaderStyles = makeStyles({\n closeButton: {\n marginLeft: \"auto\",\n position: \"absolute\",\n top: \"10px\",\n right: \"10px\",\n zIndex: 99999,\n },\n\n divider: {\n width: \"100%\",\n height: \"1px\",\n backgroundColor: tokens.colorNeutralStroke1,\n marginTop: \"6px\",\n },\n\n renderHeaderContent: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n alignItems: \"stretch\",\n\n width: \"100%\",\n },\n renderHeaderHeader: {\n \n\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"10px\"),\n gap: \"20px\",\n },\n renderHeaderFooter: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"20px\"),\n gap: \"20px\",\n },\n renderHeaderBody: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n ...shorthands.padding(\"20px\"),\n gap: \"20px\",\n },\n renderHeaderTitleContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n },\n renderHeaderTitle: {\n display: \"-webkit-box\",\n \"-webkit-line-clamp\": \"1\",\n \"-webkit-box-orient\": \"vertical\",\n\n textAlign: \"start\",\n textOverflow: \"ellipsis\",\n wordBreak: \"break-word\",\n },\n renderHeaderDescription: {\n display: \"-webkit-box\",\n \"-webkit-line-clamp\": \"4\",\n \"-webkit-box-orient\": \"vertical\",\n\n textAlign: \"start\",\n textOverflow: \"ellipsis\",\n wordBreak: \"break-word\",\n },\n dialogTitleAndDescriptionContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"start\",\n alignItems: \"start\",\n paddingLeft: \"10px\",\n paddingRight: \"20px\",\n },\n});\n","import * as React from 'react';\n\nimport {\n Button,\n Caption1,\n Subtitle1,\n} from '@fluentui/react-components';\nimport { Dismiss24Regular } from '@fluentui/react-icons';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderHeaderStyles } from './useRenderHeaderStyles';\n\nexport interface IRenderHeaderProps {\n onDismiss: (open?: boolean) => void;\n icon?: string | JSX.Element;\n title: string | React.ReactNode;\n description?: string | React.ReactNode;\n}\n\nexport const RenderHeader: React.FunctionComponent<IRenderHeaderProps> = (\n props: React.PropsWithChildren<IRenderHeaderProps>\n) => {\n const { onDismiss, title, description, icon } = props;\n const styles = useRenderHeaderStyles();\n\n return (\n <>\n <div className={styles.renderHeaderContent}>\n <div\n className={styles.renderHeaderHeader}>\n <Button\n appearance=\"subtle\"\n className={styles.closeButton}\n onClick={(ev: React.MouseEvent<HTMLButtonElement>) => {\n ev.stopPropagation();\n ev.preventDefault();\n onDismiss(false)}}\n icon={<Dismiss24Regular />}\n />\n\n <div className={styles.renderHeaderTitleContainer}>\n {React.isValidElement(icon) ? icon : <Icon icon={icon as string} />}\n <div className={styles.dialogTitleAndDescriptionContainer}>\n {React.isValidElement(title) ? (\n title\n ) : (\n <Subtitle1 className={styles.renderHeaderTitle}>{title}</Subtitle1>\n )}\n {React.isValidElement(description) ? (\n description\n ) : (\n <Caption1 className={styles.renderHeaderDescription}>{description}</Caption1>\n )}\n </div>\n </div>\n </div>\n <div className={styles.divider} />\n </div>\n </>\n );\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n makeStyles,\n shorthands,\n} from '@fluentui/react-components';\n\nexport const useRenderLabelStyles = makeStyles({\n\n labelContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n ...shorthands.gap(\"6px\"),\n },\n iconStyles: {\n width: \"26px\",\n },\n item: {\n paddingLeft: \"15px\",\n },\n \n\n});\n","import * as React from 'react';\n\nimport {\n Caption1,\n tokens,\n} from '@fluentui/react-components';\nimport { Icon } from '@iconify/react';\n\nimport { useRenderLabelStyles } from './useRenderLabelStylesStyles';\n\nexport interface IRenderLabelProps {\n label: string; icon?: string | JSX.Element; isRequired?: boolean\n}\n\nexport const RenderLabel: React.FunctionComponent<IRenderLabelProps> = (props: React.PropsWithChildren<IRenderLabelProps>) => {\n const { label, icon, isRequired } = props;\n const styles = useRenderLabelStyles();\n return (\n <>\n <div className={styles.labelContainer}>\n {icon && React.isValidElement(icon) ? (\n icon\n ) : (\n <Icon\n icon={icon as string}\n className={styles.iconStyles}\n width={\"20px\"}\n height={\"20px\"}\n color={tokens.colorBrandForeground1}\n />\n )}\n <Caption1 style={{ color: tokens.colorBrandForeground1 }}>{label}</Caption1>\n <Caption1 style={{ color: tokens.colorPaletteRedForeground1 }}>{isRequired ? \" *\" : \"\"}</Caption1>\n </div>\n </>\n );\n};\n\nexport default RenderLabel;\n","import * as React from 'react';\n\nimport {\n Body1,\n Body1Strong,\n Button,\n CardFooter,\n Field,\n Input,\n MessageBar,\n} from '@fluentui/react-components';\n\nimport { RenderLabel } from '../RenderLabel';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useLicenseManager } from '@spteck/react-hooks-library';\nimport { useStyles } from './useTrialLicenseStyles';\nimport { useUtils } from '../../hooks/useUtils';\nimport { z } from 'zod';\n\nexport interface ITrialLicenseProps {\n onTrialLicenseAdded: () => void;\n onDismiss: () => void;\n}\n\nexport const TrialLicense: React.FunctionComponent<ITrialLicenseProps> = (\n props: React.PropsWithChildren<ITrialLicenseProps>\n) => {\n const [errors, setErrors] = React.useState<{ [key: string]: string | null }>({});\n const { onTrialLicenseAdded, onDismiss } = props;\n const appGlobalState = useAtomValue(appGlobalStateAtom);\n const { userInformation, strings, tenantId, context } = appGlobalState;\n const { generateSalt } = useUtils();\n const [error, setError] = React.useState<Error | undefined>(undefined);\n\n const { requestTrialLicense } = useLicenseManager(\n tenantId as string,\n context?.manifest.id as string,\n generateSalt(tenantId as string, context?.manifest.id as string),\n context\n ) as any;\n\n // Define Zod schema for validation\n const trialLicenseSchema = z.object({\n contactFirstName: z.string().min(1, strings.contactFirstNameError),\n contactLastName: z.string().min(1, strings.contactLastNameError),\n contactEmail: z.string().email(strings.contactEmailError),\n contactCompany: z.string().min(1, strings.contactCompanyError),\n });\n\n const [formData, setFormData] = React.useState({\n contactFirstName: userInformation?.givenName as string,\n contactLastName: userInformation?.surname as string,\n contactEmail: userInformation?.mail as string,\n contactCompany: \"\",\n });\n\n const handleInputChange = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n const styles = useStyles();\n\n const handleSubmit = React.useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n // Validate form data using Zod schema\n const validation = trialLicenseSchema.safeParse(formData);\n if (!validation.success) {\n // Map errors for display\n const fieldErrors: { [key: string]: string } = {};\n validation.error.errors.forEach((error) => {\n const fieldName = error.path[0] as string;\n fieldErrors[fieldName] = error.message;\n });\n setErrors(fieldErrors);\n } else {\n // Clear errors and call the parent function\n setErrors({});\n try {\n await requestTrialLicense(\n tenantId as string,\n context.manifest.id as string,\n formData.contactFirstName,\n formData.contactLastName,\n formData.contactEmail,\n formData.contactCompany\n );\n onTrialLicenseAdded();\n } catch (error) {\n console.error(error);\n setError(error as Error);\n }\n }\n },\n [formData, onTrialLicenseAdded]\n );\n\n return (\n <div className={styles.container}>\n <div>\n <Body1Strong className={styles.title}>{strings.trialLicenseTitle}</Body1Strong>\n <Body1>{strings.trialLicenseText}</Body1>\n </div>\n\n <>\n <Field\n label={<RenderLabel label={strings.firstName} isRequired />}\n validationState={errors.contactFirstName ? \"error\" : \"none\"}\n validationMessage={errors.contactFirstName || undefined}\n >\n <Input\n name=\"contactFirstName\"\n value={formData.contactFirstName}\n onChange={handleInputChange}\n placeholder={strings.firstNamePlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.lastName} isRequired />}\n validationState={errors.contactLastName ? \"error\" : \"none\"}\n validationMessage={errors.contactLastName || undefined}\n >\n <Input\n name=\"contactLastName\"\n value={formData.contactLastName}\n onChange={handleInputChange}\n placeholder={strings.lastNamePlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.email} isRequired />}\n validationState={errors.contactEmail ? \"error\" : \"none\"}\n validationMessage={errors.contactEmail || undefined}\n >\n <Input\n name=\"contactEmail\"\n value={formData.contactEmail}\n onChange={handleInputChange}\n placeholder={strings.emailPlaceholder}\n />\n </Field>\n <Field\n label={<RenderLabel label={strings.company} isRequired />}\n validationState={errors.contactCompany ? \"error\" : \"none\"}\n validationMessage={errors.contactCompany || undefined}\n >\n <Input\n name=\"contactCompany\"\n value={formData.contactCompany}\n onChange={handleInputChange}\n placeholder={strings.companyPlaceholder}\n />\n </Field>\n {error && (\n <MessageBar style={{ marginTop: 10, marginBottom: 10 }} intent=\"error\">\n {\" \"}\n {error.message}\n </MessageBar>\n )}\n <CardFooter className={styles.cardFooter}>\n <Button appearance=\"primary\" onClick={handleSubmit}>\n {strings.register}\n </Button>\n <Button appearance=\"secondary\" onClick={onDismiss}>\n {strings.cancel}\n </Button>\n </CardFooter>\n </>\n </div>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const useStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n padding: 7px;\n background-color: ${tokens.colorNeutralBackground1};\n `,\n\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n justify-content: start;\n `,\n cardFooter : css`\n align-self: flex-end;\n margin-top: 15px;\n `,\n };\n};\n","import {\n Apps20Regular,\n Clock20Regular,\n Key20Regular,\n} from '@fluentui/react-icons';\nimport {\n Dialog,\n DialogActions,\n DialogSurface,\n DialogTitle,\n FluentProvider,\n SelectTabData,\n SelectTabEvent,\n Tab,\n TabList,\n TabValue,\n} from '@fluentui/react-components';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { ETabsOptions } from '../../models/ETabsOptions';\nimport { LicenseControl } from '../licenseControl/LicenseControl';\nimport React from 'react';\nimport { RenderHeader } from '../renderHeader';\nimport { TrialLicense } from '../trialLicense.ts/TrialLicense';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtom } from 'jotai';\n\nexport interface IRegisterDialogProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n open: boolean;\n onDismiss: (update?: boolean) => void;\n}\n\ninterface ITab {\n id: string;\n value: string;\n label: string;\n icon: JSX.Element;\n}\n\nexport const RegisterDialog: React.FC<IRegisterDialogProps> = (props: IRegisterDialogProps) => {\n const { licenseStatus, open, onDismiss, licenseType, expiryDate } = props;\n const [appGlobalState, setAppGlobalState] = useAtom(appGlobalStateAtom);\n const { theme, applicationName, applicationIcon, strings, showApps = false } = appGlobalState;\n\n const [selectedValue, setSelectedValue] = React.useState<TabValue>(\"trial\");\n\n const tabs: ITab[] = React.useMemo(() => {\n const defaultTabs = [\n { id: \"trial\", value: \"trial\", label: strings.trial, icon: <Clock20Regular /> },\n { id: \"license\", value: \"license\", label: strings.license, icon: <Key20Regular /> },\n ];\n if (showApps) {\n tabs.push({ id: \"apps\", value: \"apps\", label: strings.apps, icon: <Apps20Regular /> });\n }\n return defaultTabs;\n }, [strings]);\n\n const onTabSelect = React.useCallback((_event: SelectTabEvent, data: SelectTabData) => {\n setSelectedValue(data.value);\n }, []);\n\n React.useEffect(() => {\n const statusToTab = {\n [EStatus.notFound]: ETabsOptions.Trial,\n [EStatus.expired]: ETabsOptions.License,\n [EStatus.invalid]: ETabsOptions.License,\n [EStatus.blocked]: ETabsOptions.License,\n [EStatus.genericError]: ETabsOptions.License,\n [EStatus.valid]: ETabsOptions.License,\n };\n setSelectedValue(statusToTab[licenseStatus] || ETabsOptions.Trial);\n }, [licenseStatus]);\n\n const renderPanel = React.useMemo((): JSX.Element => {\n switch (selectedValue) {\n case \"trial\":\n return (\n <TrialLicense\n onTrialLicenseAdded={() => {\n setAppGlobalState({ ...appGlobalState, refresh: true });\n onDismiss();\n }}\n onDismiss={onDismiss}\n />\n );\n case \"license\":\n return (\n <LicenseControl\n licenseStatus={licenseStatus}\n onDismiss={onDismiss}\n licenseType={licenseType}\n expiryDate={expiryDate}\n />\n );\n case \"apps\":\n return <div>Apps</div>;\n default:\n return <></>;\n }\n }, [selectedValue, licenseStatus, licenseType, expiryDate]);\n\n const filterTabs = React.useCallback(\n (tab: ITab) => {\n if (\n licenseType?.toLocaleLowerCase() === ETabsOptions.Trial.toLocaleLowerCase() ||\n licenseStatus.toLocaleLowerCase() === EStatus.genericError.toLocaleLowerCase()\n ) {\n return tab.id.toLocaleLowerCase() !== ETabsOptions.Trial.toLocaleLowerCase();\n }\n return true;\n },\n [licenseType, licenseStatus]\n );\n\n return (\n <FluentProvider theme={theme}>\n <Dialog open={open} modalType=\"modal\">\n <DialogSurface style={{ minHeight: 300 }}>\n <DialogTitle>\n <RenderHeader icon={applicationIcon} title={applicationName} onDismiss={onDismiss} />\n </DialogTitle>\n\n <TabList selectedValue={selectedValue} onTabSelect={onTabSelect} selectTabOnFocus={true} size=\"medium\">\n {tabs.filter(filterTabs).map((tab) => (\n <Tab key={tab.id} value={tab.value} icon={tab.icon}>\n {tab.label}\n </Tab>\n ))}\n </TabList>\n {renderPanel}\n <DialogActions></DialogActions>\n </DialogSurface>\n </Dialog>\n </FluentProvider>\n );\n};\n","import * as React from 'react';\n\nimport {\n Body1,\n Body1Strong,\n Button,\n DialogActions,\n FluentProvider,\n Subtitle1,\n} from '@fluentui/react-components';\n\nimport { EStatus } from '@spteck/react-hooks-library';\nimport { RegisterDialog } from '../registerDialog/RegisterDialog';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { useAtomValue } from 'jotai';\nimport { useStyles } from './licensePlaceHolderStyles';\nimport { useUtils } from '../../hooks/useUtils';\n\nexport interface ILicensePlaceHolderProps {\n licenseStatus: EStatus;\n licenseType: string | undefined;\n expiryDate: number | undefined;\n}\n\nexport const LicensePlaceHolder: React.FunctionComponent<ILicensePlaceHolderProps> = (\n props: React.PropsWithChildren<ILicensePlaceHolderProps>\n) => {\n const appglobalState = useAtomValue(appGlobalStateAtom);\n const { theme, applicationName, applicationIcon, placeHolderText, strings } = appglobalState;\n const styles = useStyles();\n const [isOpenLicenseForm, setIsOpenLicenseForm] = React.useState<boolean>(false);\n const { licenseStatus, licenseType, expiryDate } = props;\n const { formatString } = useUtils();\n const onDissmiss = React.useCallback(() => {\n setIsOpenLicenseForm(false);\n }, []);\n\n const formatDate = React.useMemo(() => new Date(expiryDate as number).toLocaleDateString(), [expiryDate]);\n\n const getMessageAndAction = React.useCallback(() => {\n switch (licenseStatus) {\n case EStatus.blocked:\n return {\n message: formatString(strings.messageStatusBlockedShort, licenseType),\n actionLabel: strings.details,\n };\n case EStatus.expired:\n return {\n message: formatString(strings.messageStatusExpiredShort, licenseType, formatDate),\n actionLabel: strings.buyLicense,\n };\n case EStatus.invalid:\n return {\n message: formatString(strings.messageStatusInvalidShort, licenseType ?? \"\"),\n actionLabel: strings.details,\n };\n case EStatus.notFound:\n return {\n message: formatString(strings.messageStatusNotFoundShort),\n actionLabel: strings.requestLicense,\n };\n case EStatus.genericError:\n return {\n message: formatString(strings.messageStatusGenericErrorShort, licenseType ?? \"\"),\n actionLabel: strings.details,\n };\n default:\n return undefined;\n }\n }, [licenseStatus]);\n\n const content = React.useMemo(() => {\n return getMessageAndAction();\n }, [getMessageAndAction]);\n\n return (\n <>\n <FluentProvider theme={theme}>\n <div className={styles.informationPanel}>\n <div className={styles.infoRow}>\n <div className={styles.title}>\n <div className={styles.titleContainer}>\n <div className={styles.titleAndIcon}>\n {applicationIcon} <Subtitle1> {applicationName}</Subtitle1>{\" \"}\n </div>\n <Body1>{placeHolderText}</Body1>\n </div>\n </div>\n </div>\n <div className={styles.infoRow}>\n <Body1Strong> {content?.message}</Body1Strong>\n </div>\n <div className={styles.infoRow}>\n <DialogActions style={{ marginTop: 15 }}>\n <Button\n appearance=\"primary\"\n onClick={() => {\n setIsOpenLicenseForm(true);\n }}\n >\n {content?.actionLabel}\n </Button>\n </DialogActions>\n {isOpenLicenseForm && (\n <RegisterDialog\n licenseStatus={licenseStatus}\n licenseType={licenseType}\n expiryDate={expiryDate}\n open={isOpenLicenseForm}\n onDismiss={onDissmiss}\n />\n )}\n </div>\n </div>\n </FluentProvider>\n </>\n );\n};\n","import { css } from '@emotion/css';\nimport { tokens } from '@fluentui/react-components';\n\nexport const \n useStyles = () => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n row-gap: 10px;\n margin-top: 10px;\n margin-bottom: 30px;\n `,\n titleContainer: css`\n display: flex;\n flex-direction: column;\n width: 100%;\n justify-content: center;\n align-items: center;\n gap: 10px;\n `,\n titleAndIcon: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n `,\n informationPanel: css`\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n background-color: ${tokens.colorNeutralBackground3};\n `,\n infoRow: css`\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n width: 100%;\n `,\n title: css`\n display: flex;\n flex-direction: row;\n gap: 10px;\n align-items: center;\n `,\n };\n};","import * as React from 'react';\n\nimport {\n Button,\n MessageBar,\n MessageBarActions,\n MessageBarBody,\n MessageBarTitle,\n} from '@fluentui/react-components';\n\nexport interface IInformationBarProps {\n message: JSX.Element | string;\n onAction?: () => void;\n}\n\nexport const InformationBar: React.FunctionComponent<IInformationBarProps> = (\n props: React.PropsWithChildren<IInformationBarProps>\n) => {\n const { message, onAction } = props;\n return (\n <>\n <MessageBar intent={\"warning\"}>\n <MessageBarBody>\n <MessageBarTitle>License Manager</MessageBarTitle>\n {message}\n </MessageBarBody>\n <MessageBarActions>\n <Button onClick={onAction}>Details</Button>\n </MessageBarActions>\n </MessageBar>\n </>\n );\n};\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport React from \"react\";\nimport type { SVGProps } from \"react\";\n\nexport function ErrorIcon(props: SVGProps<SVGSVGElement>) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n <g fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <path d=\"M2 6.95c0-.883 0-1.324.07-1.692A4 4 0 0 1 5.257 2.07C5.626 2 6.068 2 6.95 2c.386 0 .58 0 .766.017a4 4 0 0 1 2.18.904c.144.119.28.255.554.529L11 4c.816.816 1.224 1.224 1.712 1.495a4 4 0 0 0 .848.352C14.098 6 14.675 6 15.828 6h.374c2.632 0 3.949 0 4.804.77q.119.105.224.224c.77.855.77 2.172.77 4.804V14c0 3.771 0 5.657-1.172 6.828S17.771 22 14 22h-4c-3.771 0-5.657 0-6.828-1.172S2 17.771 2 14z\" />\n <path strokeLinecap=\"round\" d=\"m10.5 15l3-3m0 3l-3-3\" />\n </g>\n </svg>\n );\n}\n","import React from 'react';\n\nimport { css } from '@emotion/css';\nimport {\n Body1Strong,\n shorthands,\n Subtitle1,\n tokens,\n} from '@fluentui/react-components';\n\nimport { ErrorIcon } from '../errorSVG/ErrorSVG';\n\ninterface IErrorDisplayProps {\n message: string;\n}\n\nconst styles = {\n container: css({\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n textAlign: \"center\",\n backgroundColor: tokens.colorNeutralBackground2,\n borderRadius: tokens.borderRadiusMedium,\n ...shorthands.padding(tokens.spacingVerticalXL, tokens.spacingHorizontalXL),\n color: tokens.colorNeutralForeground1,\n }),\n icon: css({\n marginTop: tokens.spacingHorizontalXL,\n fontSize: \"50px\",\n marginBottom: tokens.spacingHorizontalXL,\n color: tokens.colorBrandBackground,\n }),\n message: css({\n marginBottom: tokens.spacingHorizontalXL,\n }),\n};\n\nexport const ShowError: React.FC<IErrorDisplayProps> = ({ message }) => {\n return (\n <div className={styles.container}>\n <Subtitle1>News Feed - Application</Subtitle1>\n <ErrorIcon className={styles.icon} />\n <Body1Strong className={styles.message}>{message}</Body1Strong>\n </div>\n );\n};\n\nexport default ShowError;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\n\nimport {\n EStatus,\n ICheckAndUpdateLicesingResponse,\n useLicenseManager,\n useUser,\n} from '@spteck/react-hooks-library';\nimport {\n FluentProvider,\n IdPrefixProvider,\n teamsLightTheme,\n} from '@fluentui/react-components';\n\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { IGlobalState } from '../../models/IGlobalState';\nimport { ILicenseProviderProps } from './ILicenseProviderProps';\nimport { InformationBar } from '../informationBar/InformationBar';\nimport { LicensePlaceHolder } from '../licensePlaceHolder/LicensePlaceHolder';\nimport { RegisterDialog } from '../registerDialog/RegisterDialog';\nimport ShowError from '../showError/ShowError';\nimport { User } from '@microsoft/microsoft-graph-types';\nimport { appGlobalStateAtom } from '../../atoms/appGlobalState';\nimport { css } from '@emotion/css';\nimport { differenceInDays } from 'date-fns';\nimport { useAtom } from 'jotai';\nimport { useUtils } from '../../hooks/useUtils';\n\nconst NUMBER_DAYS_WARNING = 30;\n\nexport const LicenseProvider: React.FunctionComponent<ILicenseProviderProps> = (\n props: React.PropsWithChildren<ILicenseProviderProps>\n) => {\n const { theme = teamsLightTheme, context, children, tenantId, language = \"en\", applicationId } = props;\n\n /* const instanceId = context?.instanceId as string;\n const tenantId = context?.pageContext.legacyPageContext.aadTenantId; */\n const [error, setError] = React.useState<Error | undefined>(undefined);\n const [isLoading, setIsLoading] = React.useState<boolean>(true);\n const [licensingResponse, setLicenseResponse] = React.useState<ICheckAndUpdateLicesingResponse>();\n const [appglobalState, setAppGlobalState] = useAtom<IGlobalState>(appGlobalStateAtom);\n const { userInformation } = useUser(context);\n const [isOpenRegisterDialog, setIsOpenRegisterDialog] = React.useState<boolean>(false);\n const { formatString } = useUtils();\n const { strings, refresh } = appglobalState;\n const { generateSalt } = useUtils();\n const { status, licenseType, expiryDate } = (licensingResponse as ICheckAndUpdateLicesingResponse) || {};\n\n const { checkAndUpdateLicensing } = useLicenseManager(\n tenantId as string,\n applicationId as string, \n generateSalt(tenantId as string, applicationId as string),\n context\n ) as any;\n\n const styles = React.useMemo(() => {\n return {\n root: css({\n backgroundColor: \"transparent\",\n padding: 20,\n }),\n };\n }, []);\n\n React.useEffect(() => {\n (async () => {\n try {\n const stringsLoc = await import(`./loc/${language}.json`);\n setAppGlobalState((prev) => ({\n ...prev,\n ...props,\n strings: stringsLoc,\n userInformation: userInformation as User,\n }));\n const result = await checkAndUpdateLicensing();\n setLicenseResponse(result);\n setIsLoading(false);\n } catch (error) {\n if (error instanceof Error) setError(error);\n setIsLoading(false);\n }\n })();\n }, [userInformation]);\n\n const fallbackRender = React.useCallback(({ error }: { error: Error }) => {\n console.error(`[LicenseManager:Error: ${error.message}`);\n return <ShowError message={error.message} />;\n }, []);\n\n const onMessageBarAction = React.useCallback(() => {\n setIsOpenRegisterDialog(true);\n }, []);\n\n // ipdate liecense status on refresh\n React.useEffect(() => {\n (async () => {\n try {\n setAppGlobalState((prev) => ({\n ...prev,\n refresh: false,\n }));\n const result = await checkAndUpdateLicensing();\n setLicenseResponse(result);\n setIsLoading(false);\n } catch (error) {\n if (error instanceof Error) setError(error);\n setIsLoading(false);\n }\n })();\n }, [refresh]);\n\n const onDissmiss = React.useCallback(() => {\n setIsOpenRegisterDialog(false);\n }, []);\n\n // renderMessagebar if the license is about to expire\n const renderMessagebar = React.useCallback(\n (licenseType: string, expiryDate: number, warningDays: number): JSX.Element => {\n const expirationDate = new Date(expiryDate);\n const today = new Date();\n const formatedExpiredDate = expirationDate.toLocaleDateString();\n const dayDiff = differenceInDays(expirationDate, today);\n let message = \"\";\n if (dayDiff <= warningDays) {\n message = formatString(strings.messageLicenseWarning, licenseType, dayDiff, formatedExpiredDate);\n return <InformationBar message={message} onAction={onMessageBarAction} />;\n }\n return <></>;\n },\n [expiryDate]\n );\n\n // render the control based on the license status\n const renderContent = React.useCallback((): JSX.Element => {\n switch (status) {\n case EStatus.valid:\n return (\n <>\n {renderMessagebar(licenseType as string, expiryDate as number, NUMBER_DAYS_WARNING)}\n {children}\n </>\n );\n case EStatus.genericError:\n case EStatus.notFound:\n case EStatus.blocked:\n case EStatus.expired:\n case EStatus.invalid:\n return <LicensePlaceHolder licenseStatus={status} licenseType={licenseType} expiryDate={expiryDate} />;\n default:\n break;\n }\n return <></>;\n }, [licensingResponse, refresh]);\n\n if (isLoading) return null;\n if (error) return <ShowError message={error.message} />;\n\n return (\n <>\n <IdPrefixProvider value=\"news-feed-\">\n <FluentProvider theme={theme} className={styles.root}>\n <ErrorBoundary fallbackRender={fallbackRender}>\n {renderContent()}\n {isOpenRegisterDialog && (\n <RegisterDialog\n licenseStatus={status}\n licenseType={licenseType}\n expiryDate={expiryDate}\n open={isOpenRegisterDialog}\n onDismiss={onDissmiss}\n />\n )}\n </ErrorBoundary>\n </FluentProvider>\n </IdPrefixProvider>\n </>\n );\n};\n"],"names":["ETabsOptions","Mailto","props","to","from","subject","body","children","Component","as","_props$componentProps","componentProps","mailtoLink","encodeURIComponent","React","href","onClick","e","preventDefault","window","open","appGlobalStateAtom","atom","theme","webLightTheme","language","strings","refresh","useUtils","formatString","useCallback","template","args","Array","_len","_key","arguments","replace","match","number","generateSalt","tenantId","appId","SHA256","toString","LicenseControl","_ref","licenseStatus","onDismiss","licenseType","expiryDate","styles","container","css","_templateObject","_taggedTemplateLiteralLoose","tokens","colorNeutralBackground1","title","_templateObject2","footer","_templateObject3","formatDate","Date","toLocaleDateString","appglobalState","useAtomValue","applicationId","applicationName","userInformation","getMessageAndAction","EStatus","blocked","message","messageStatusBlocked","actionLabel","expired","messageStatusExpired","invalid","messageStatusInvalid","notFound","messageStatusNotFound","genericError","messageStatusGenericError","valid","messageStatusValid","undefined","content","useMemo","generateBodyText","_ref2","givenName","surname","mail","_content","className","Text","CardFooter","Button","appearance","target","useRenderHeaderStyles","makeStyles","closeButton","marginLeft","position","top","right","zIndex","divider","width","height","backgroundColor","colorNeutralStroke1","marginTop","renderHeaderContent","display","flexDirection","justifyContent","alignItems","renderHeaderHeader","_extends","shorthands","padding","gap","renderHeaderFooter","renderHeaderBody","renderHeaderTitleContainer","renderHeaderTitle","-webkit-line-clamp","-webkit-box-orient","textAlign","textOverflow","wordBreak","renderHeaderDescription","dialogTitleAndDescriptionContainer","paddingLeft","paddingRight","RenderHeader","description","icon","ev","stopPropagation","Dismiss24Regular","Icon","Subtitle1","Caption1","useRenderLabelStyles","labelContainer","iconStyles","item","RenderLabel","label","isRequired","color","colorBrandForeground1","style","colorPaletteRedForeground1","TrialLicense","_React$useState","errors","setErrors","onTrialLicenseAdded","appGlobalState","context","_React$useState2","error","setError","requestTrialLicense","useLicenseManager","manifest","id","trialLicenseSchema","z","object","contactFirstName","string","min","contactFirstNameError","contactLastName","contactLastNameError","contactEmail","email","contactEmailError","contactCompany","contactCompanyError","_React$useState3","formData","setFormData","handleInputChange","_e$target","name","value","prev","_extends2","cardFooter","handleSubmit","_asyncToGenerator","_regeneratorRuntime","mark","_callee","validation","fieldErrors","wrap","_context","next","safeParse","success","forEach","path","t0","console","stop","_x","apply","Body1Strong","trialLicenseTitle","Body1","trialLicenseText","Field","firstName","validationState","validationMessage","Input","onChange","placeholder","firstNamePlaceholder","lastName","lastNamePlaceholder","emailPlaceholder","company","companyPlaceholder","MessageBar","marginBottom","intent","register","cancel","RegisterDialog","_useAtom","useAtom","setAppGlobalState","applicationIcon","_appGlobalState$showA","showApps","useState","selectedValue","setSelectedValue","tabs","defaultTabs","trial","Clock20Regular","license","Key20Regular","push","apps","Apps20Regular","onTabSelect","_event","data","useEffect","statusToTab","_statusToTab","Trial","License","renderPanel","filterTabs","tab","toLocaleLowerCase","FluentProvider","Dialog","modalType","DialogSurface","minHeight","DialogTitle","TabList","selectTabOnFocus","size","filter","map","Tab","key","DialogActions","LicensePlaceHolder","placeHolderText","titleContainer","titleAndIcon","informationPanel","_templateObject4","colorNeutralBackground3","infoRow","_templateObject5","_templateObject6","isOpenLicenseForm","setIsOpenLicenseForm","onDissmiss","messageStatusBlockedShort","details","messageStatusExpiredShort","buyLicense","messageStatusInvalidShort","messageStatusNotFoundShort","requestLicense","messageStatusGenericErrorShort","InformationBar","onAction","MessageBarBody","MessageBarTitle","MessageBarActions","ErrorIcon","xmlns","viewBox","fill","stroke","strokeWidth","d","strokeLinecap","colorNeutralBackground2","borderRadius","borderRadiusMedium","spacingVerticalXL","spacingHorizontalXL","colorNeutralForeground1","fontSize","colorBrandBackground","ShowError","_props$theme","teamsLightTheme","_props$language","isLoading","setIsLoading","licensingResponse","setLicenseResponse","useUser","_React$useState4","isOpenRegisterDialog","setIsOpenRegisterDialog","_useUtils2","status","checkAndUpdateLicensing","root","stringsLoc","sent","Error","fallbackRender","_ref3","onMessageBarAction","_callee2","_context2","renderMessagebar","warningDays","expirationDate","today","formatedExpiredDate","dayDiff","differenceInDays","messageLicenseWarning","renderContent","IdPrefixProvider","ErrorBoundary"],"mappings":"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"}
@@ -595,9 +595,10 @@ var LicenseControl = function LicenseControl(_ref) {
595
595
  // utils.ts
596
596
  var generateBodyText = React__default.useCallback(function () {
597
597
  var _content;
598
- var mail = userInformation.mail,
599
- givenName = userInformation.givenName,
600
- surname = userInformation.surname;
598
+ var _ref2 = userInformation || {},
599
+ mail = _ref2.mail,
600
+ givenName = _ref2.givenName,
601
+ surname = _ref2.surname;
601
602
  var body = EMAIL_BODY_TEMPLATE;
602
603
  if (licenseStatus === EStatus.notFound) {
603
604
  body = EMAIL_BODY_TEMPLATE_REQUEST_LICENSE;