{"version":3,"sources":["configVariables.ts","components/config.tsx","i18n.ts","apis/axiosJWTDecorator.ts","apis/messageListApi.ts","actions/index.ts","components/OverFlow/sentMessageOverflow.tsx","components/Messages/messages.tsx","components/OverFlow/draftMessageOverflow.tsx","components/DraftMessages/draftMessages.tsx","components/TabContainer/tabContainer.tsx","components/AdaptiveCard/adaptiveCard.ts","utility/imageutility.tsx","components/NewMessage/newMessage.tsx","components/StatusTaskModule/statusTaskModule.tsx","components/SendConfirmationTaskModule/sendConfirmationTaskModule.tsx","components/ErrorPage/errorPage.tsx","components/SignInPage/signInPage.tsx","components/SignInPage/signInSimpleStart.tsx","components/SignInPage/signInSimpleEnd.tsx","App.tsx","serviceWorker.ts","reducers/index.ts","index.tsx"],"names":["getBaseUrl","window","location","origin","Configuration","props","state","url","microsoftTeams","registerOnSaveHandler","saveEvent","setSettings","entityId","contentUrl","suggestedDisplayName","notifySuccess","setValidityState","className","React","Component","i18n","use","Backend","initReactI18next","init","fallbackLng","interpolation","escapeValue","formatDate","date","moment","format","formatDuration","startDate","endDate","result","difference","diff","totalDuration","duration","Math","floor","asHours","slice","utc","asMilliseconds","locale","formatNumber","number","search","URLSearchParams","get","Number","toLocaleString","axiosJWTDecoratorInstance","handleError","needAuthorizationHeader","config","this","setupAuthorizationHeader","axios","delete","data","post","put","error","hasOwnProperty","errorStatus","response","status","href","language","Promise","resolve","reject","authTokenRequest","successCallback","token","defaults","headers","failureCallback","console","resources","getAuthToken","baseAxiosUrl","getSentNotifications","a","getDraftNotifications","verifyGroupAccess","getGroups","id","searchGroups","query","exportNotification","payload","getSentNotification","getDraftNotification","deleteDraftNotification","duplicateDraftNotification","sendDraftNotification","updateDraftNotification","createDraftNotification","getTeams","getConsentSummaries","sendPreview","getAuthenticationConsentMetadata","windowLocationOriginDomain","login_hint","undefined","selectMessage","message","type","getMessagesList","dispatch","notificationList","forEach","notification","sendingStartedDate","sentDate","getDraftMessagesList","Overflow","localize","onOpenTaskModule","event","title","taskInfo","height","width","fallbackUrl","startTask","err","duplicateDraftMessage","t","menuOpen","items","key","icon","name","outline","active","indicator","menu","content","onClick","stopPropagation","setState","then","onMenuOpenChange","e","Menu","iconOnly","styles","overflowWithTranslation","withTranslation","connect","messagesList","Messages","interval","isOpenTaskModuleAllowed","processLabels","Flex","vAlign","fill","gap","Item","size","variables","grow","Text","truncated","weight","shrink","margin","renderSendingText","text","sentCount","succeeded","failed","unknown","totalMessageCount","messageContent","TooltipHost","calloutProps","gapSpace","Icon","xSpacing","escFunction","keyCode","submitTask","initializeIcons","loader","bind","document","addEventListener","setInterval","removeEventListener","clearInterval","nextProps","keyCount","label","outList","map","allMessages","Loader","length","List","selectable","messagesWithTranslation","deleteDraftMessage","teamsChannelId","teamsTeamId","context","teamId","channelId","draftNotificationId","catch","messages","draftMessagesList","selectedMessage","DraftMessages","itemsAccount","hAlign","allDraftMessages","draftMessagesWithTranslation","TabContainer","onNewMessage","panels","Button","primary","Accordion","defaultActiveIndex","tabContainerWithTranslation","getInitAdaptiveCard","setCardTitle","card","body","setCardImageLink","imageLink","setCardSummary","summary","setCardAuthor","author","setCardBtn","buttonTitle","buttonLink","actions","ImageUtil","makeInitialImage","canvas","createElement","style","display","appendChild","getContext","colorNum","ColorHash","hex","fillStyle","fillRect","font","split","len","first","initials","fillText","toUpperCase","toDataURL","removeChild","NewMessage","makeDropdownItems","resultedTeams","element","push","header","mail","image","team","makeDropdownItemList","fromItems","dropdownItemList","find","x","setDefaultCard","titleAsString","summaryAsString","authorAsString","buttonTitleAsString","imgUrl","getTeamList","teams","setGroupAccess","groupAccess","getGroupData","groups","getItem","draftMessageDetail","selectedRadioButton","rosters","allUsers","teamsOptionSelected","selectedTeamsNum","rostersOptionSelected","selectedRostersNum","groupsOptionSelected","selectedGroupsNum","selectedRadioBtn","selectedTeams","selectedRosters","selectedGroups","btnLink","btnTitle","allUsersOptionSelected","updateCard","onGroupSelected","value","isSaveBtnDisabled","teamsSelectionIsValid","rostersSelectionIsValid","groupsSelectionIsValid","nothingSelected","isNextBtnDisabled","errorImageUrlMessage","errorButtonUrlMessage","getItems","remainingUserTeams","filter","findIndex","y","onTeamsChange","itemsData","MAX_SELECTED_TEAMS_NUM","onRostersChange","onGroupsChange","onGroupSearch","itemList","searchQuery","item","toLowerCase","indexOf","onGroupSearchQueryChange","noResultMessage","loading","encodeURIComponent","onSave","selctedRosters","draftMessage","messageId","exists","editDraftMessage","postDraftMessage","onNext","page","onBack","onTitleChanged","showDefaultCard","target","onImageLinkChanged","startsWith","onSummaryChanged","onAuthorChanged","onBtnTitleChanged","onBtnLinkChanged","adaptiveCard","AdaptiveCards","parse","renderedCard","render","container","getElementsByClassName","firstChild","replaceWith","link","onExecuteAction","action","open","unstablePinned","params","match","placeholder","onChange","autoComplete","required","errorLabel","autoFocus","disabled","onSelected","Dropdown","hidden","multiple","onSelectedChange","noResultsMessage","unstable_pinned","loadingMessage","getGroupItems","onSearchQueryChange","secondary","newMessageWithTranslation","StatusTaskModule","initMessage","sendingDuration","onClose","onExport","classList","remove","getItemList","media","Image","src","avatar","renderAudienceSelection","teamNames","rosterNames","groupNames","renderErrorMessage","errorMessage","renderWarningMessage","warningMessage","canDownload","labelPosition","sendingCompleted","StatusTaskModuleWithTranslation","SendConfirmationTaskModule","onSendMessage","sort","sendConfirmationTaskModuleWithTranslation","ErrorPage","useTranslation","parseErrorMessage","SignInPage","authenticate","log","reason","SignInSimpleStart","useEffect","replace","upn","assign","SignInSimpleEnd","hashParams","hash","substr","s","k","v","decodeURIComponent","getHashParameters","notifyFailure","App","setThemeComponent","theme","Provider","themes","teamsDark","getAppDom","teamsHighContrast","updateTheme","themeStyle","ThemeStyle","Dark","HighContrast","Light","baseFontSize","fallback","exact","path","component","forceUpdate","changeLanguage","updateLocale","Boolean","hostname","combineReducers","draftMessages","store","createStore","reducers","applyMiddleware","thunk","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.2df0782b.chunk.js","sourcesContent":["export const getBaseUrl = (): string => {\r\n return window.location.origin;\r\n}\r\n","import React from 'react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { getBaseUrl } from '../configVariables';\r\n\r\nexport interface IConfigState {\r\n url: string;\r\n}\r\n\r\nclass Configuration extends React.Component<{}, IConfigState> {\r\n constructor(props: {}) {\r\n super(props);\r\n this.state = {\r\n url: getBaseUrl() + \"/messages?locale={locale}\"\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n\r\n microsoftTeams.settings.registerOnSaveHandler((saveEvent) => {\r\n microsoftTeams.settings.setSettings({\r\n entityId: \"Company_Communicator_App\",\r\n contentUrl: this.state.url,\r\n suggestedDisplayName: \"Company Communicator\",\r\n });\r\n saveEvent.notifySuccess();\r\n });\r\n\r\n microsoftTeams.settings.setValidityState(true);\r\n\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
\r\n

Please click Save to get started.

\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default Configuration;\r\n","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport Backend from 'i18next-http-backend';\r\nimport moment from 'moment';\r\nimport 'moment/min/locales.min';\r\n\r\nexport const defaultLocale = () => {\r\n return 'en-US';\r\n} \r\n\r\ni18n\r\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\r\n // learn more: https://github.com/i18next/i18next-http-backend\r\n .use(Backend)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n fallbackLng: defaultLocale(),\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n }\r\n });\r\n\r\nexport const updateLocale = () => {\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const locale = params.get(\"locale\") || defaultLocale();\r\n i18n.changeLanguage(locale);\r\n moment.locale(locale);\r\n};\r\n\r\nexport const formatDate = (date: string) => {\r\n if (!date) return date;\r\n return moment(date).format('l LT');\r\n}\r\n\r\nexport const formatDuration = (startDate: string, endDate: string) => {\r\n let result = \"\";\r\n if (startDate && endDate) {\r\n const difference = moment(endDate).diff(moment(startDate));\r\n const totalDuration = moment.duration(difference);\r\n // Handling the scenario of duration being more than 24 hrs as it is not done by moment.js.\r\n const hh = (\"0\" + Math.floor(totalDuration.asHours())).slice(-2);\r\n result = hh + moment.utc(totalDuration.asMilliseconds()).locale(defaultLocale()).format(\":mm:ss\")\r\n }\r\n return result;\r\n}\r\n\r\nexport const formatNumber = (number: any) => {\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const locale = params.get(\"locale\") || defaultLocale();\r\n return Number(number).toLocaleString(locale);\r\n}\r\n\r\nexport default i18n;","import axios, { AxiosResponse, AxiosRequestConfig } from \"axios\";\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport i18n from '../i18n';\r\n\r\nexport class AxiosJWTDecorator {\r\n public async get>(\r\n url: string,\r\n handleError: boolean = true,\r\n needAuthorizationHeader: boolean = true,\r\n config?: AxiosRequestConfig,\r\n ): Promise {\r\n try {\r\n if (needAuthorizationHeader) {\r\n config = await this.setupAuthorizationHeader(config);\r\n }\r\n return await axios.get(url, config);\r\n } catch (error) {\r\n if (handleError) {\r\n this.handleError(error);\r\n throw error;\r\n }\r\n else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n public async delete>(\r\n url: string,\r\n handleError: boolean = true,\r\n config?: AxiosRequestConfig\r\n ): Promise {\r\n try {\r\n config = await this.setupAuthorizationHeader(config);\r\n return await axios.delete(url, config);\r\n } catch (error) {\r\n if (handleError) {\r\n this.handleError(error);\r\n throw error;\r\n }\r\n else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n public async post>(\r\n url: string,\r\n data?: any,\r\n handleError: boolean = true,\r\n config?: AxiosRequestConfig\r\n ): Promise {\r\n try {\r\n config = await this.setupAuthorizationHeader(config);\r\n return await axios.post(url, data, config);\r\n } catch (error) {\r\n if (handleError) {\r\n this.handleError(error);\r\n throw error;\r\n }\r\n else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n public async put>(\r\n url: string,\r\n data?: any,\r\n handleError: boolean = true,\r\n config?: AxiosRequestConfig\r\n ): Promise {\r\n try {\r\n config = await this.setupAuthorizationHeader(config);\r\n return await axios.put(url, data, config);\r\n } catch (error) {\r\n if (handleError) {\r\n this.handleError(error);\r\n throw error;\r\n }\r\n else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n private handleError(error: any): void {\r\n if (error.hasOwnProperty(\"response\")) {\r\n const errorStatus = error.response.status;\r\n if (errorStatus === 403) {\r\n window.location.href = `/errorpage/403?locale=${i18n.language}`;\r\n } else if (errorStatus === 401) {\r\n window.location.href = `/errorpage/401?locale=${i18n.language}`;\r\n } else {\r\n window.location.href = `/errorpage?locale=${i18n.language}`;\r\n }\r\n } else {\r\n window.location.href = `/errorpage?locale=${i18n.language}`;\r\n }\r\n }\r\n\r\n private async setupAuthorizationHeader(\r\n config?: AxiosRequestConfig\r\n ): Promise {\r\n microsoftTeams.initialize();\r\n\r\n return new Promise((resolve, reject) => {\r\n const authTokenRequest = {\r\n successCallback: (token: string) => {\r\n if (!config) {\r\n config = axios.defaults;\r\n }\r\n config.headers[\"Authorization\"] = `Bearer ${token}`;\r\n config.headers[\"Accept-Language\"] = i18n.language;\r\n resolve(config);\r\n },\r\n failureCallback: (error: string) => {\r\n // When the getAuthToken function returns a \"resourceRequiresConsent\" error, \r\n // it means Azure AD needs the user's consent before issuing a token to the app. \r\n // The following code redirects the user to the \"Sign in\" page where the user can grant the consent. \r\n // Right now, the app redirects to the consent page for any error.\r\n console.error(\"Error from getAuthToken: \", error);\r\n window.location.href = `/signin?locale=${i18n.language}`;\r\n },\r\n resources: []\r\n };\r\n microsoftTeams.authentication.getAuthToken(authTokenRequest);\r\n });\r\n }\r\n}\r\n\r\nconst axiosJWTDecoratorInstance = new AxiosJWTDecorator();\r\nexport default axiosJWTDecoratorInstance;","import axios from './axiosJWTDecorator';\r\nimport { getBaseUrl } from '../configVariables';\r\n\r\nlet baseAxiosUrl = getBaseUrl() + '/api';\r\n\r\nexport const getSentNotifications = async (): Promise => {\r\n let url = baseAxiosUrl + \"/sentnotifications\";\r\n return await axios.get(url);\r\n}\r\n\r\nexport const getDraftNotifications = async (): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications\";\r\n return await axios.get(url);\r\n}\r\n\r\nexport const verifyGroupAccess = async (): Promise => {\r\n let url = baseAxiosUrl + \"/groupdata/verifyaccess\";\r\n return await axios.get(url, false);\r\n}\r\n\r\nexport const getGroups = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/groupdata/\" + id;\r\n return await axios.get(url);\r\n}\r\n\r\nexport const searchGroups = async (query: string): Promise => {\r\n let url = baseAxiosUrl + \"/groupdata/search/\" + query;\r\n return await axios.get(url);\r\n}\r\n\r\nexport const exportNotification = async(payload: {}): Promise => {\r\n let url = baseAxiosUrl + \"/exportnotification/export\";\r\n return await axios.put(url, payload);\r\n}\r\n\r\nexport const getSentNotification = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/sentnotifications/\" + id;\r\n return await axios.get(url);\r\n}\r\n\r\nexport const getDraftNotification = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications/\" + id;\r\n return await axios.get(url);\r\n}\r\n\r\n\r\nexport const deleteDraftNotification = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications/\" + id;\r\n return await axios.delete(url);\r\n}\r\n\r\nexport const duplicateDraftNotification = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications/duplicates/\" + id;\r\n return await axios.post(url);\r\n}\r\n\r\nexport const sendDraftNotification = async (payload: {}): Promise => {\r\n let url = baseAxiosUrl + \"/sentnotifications\";\r\n return await axios.post(url, payload);\r\n}\r\n\r\nexport const updateDraftNotification = async (payload: {}): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications\";\r\n return await axios.put(url, payload);\r\n}\r\n\r\nexport const createDraftNotification = async (payload: {}): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications\";\r\n return await axios.post(url, payload);\r\n}\r\n\r\nexport const getTeams = async (): Promise => {\r\n let url = baseAxiosUrl + \"/teamdata\";\r\n return await axios.get(url);\r\n}\r\n\r\nexport const getConsentSummaries = async (id: number): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications/consentSummaries/\" + id;\r\n return await axios.get(url);\r\n}\r\n\r\nexport const sendPreview = async (payload: {}): Promise => {\r\n let url = baseAxiosUrl + \"/draftnotifications/previews\";\r\n return await axios.post(url, payload);\r\n}\r\n\r\nexport const getAuthenticationConsentMetadata = async (windowLocationOriginDomain: string, login_hint: string): Promise => {\r\n let url = `${baseAxiosUrl}/authenticationMetadata/consentUrl?windowLocationOriginDomain=${windowLocationOriginDomain}&loginhint=${login_hint}`;\r\n return await axios.get(url, undefined, false);\r\n}\r\n","import { formatDate } from '../i18n';\r\nimport { getSentNotifications, getDraftNotifications } from '../apis/messageListApi';\r\n\r\ntype Notification = {\r\n createdDateTime: string,\r\n failed: number,\r\n id: string,\r\n isCompleted: boolean,\r\n sentDate: string,\r\n sendingStartedDate: string,\r\n sendingDuration: string,\r\n succeeded: number,\r\n throttled: number,\r\n title: string,\r\n totalMessageCount: number,\r\n}\r\n\r\nexport const selectMessage = (message: any) => {\r\n return {\r\n type: 'MESSAGE_SELECTED',\r\n payload: message\r\n };\r\n};\r\n\r\nexport const getMessagesList = () => async (dispatch: any) => {\r\n const response = await getSentNotifications();\r\n const notificationList: Notification[] = response.data;\r\n notificationList.forEach(notification => {\r\n notification.sendingStartedDate = formatDate(notification.sendingStartedDate);\r\n notification.sentDate = formatDate(notification.sentDate);\r\n });\r\n dispatch({ type: 'FETCH_MESSAGES', payload: notificationList });\r\n};\r\n\r\nexport const getDraftMessagesList = () => async (dispatch: any) => {\r\n const response = await getDraftNotifications();\r\n dispatch({ type: 'FETCH_DRAFTMESSAGES', payload: response.data });\r\n};","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Menu } from '@stardust-ui/react';\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { duplicateDraftNotification } from '../../apis/messageListApi';\r\nimport { selectMessage, getMessagesList, getDraftMessagesList } from '../../actions';\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport interface OverflowProps extends WithTranslation {\r\n message?: any;\r\n styles?: object;\r\n title?: string;\r\n selectMessage?: any;\r\n getMessagesList?: any;\r\n getDraftMessagesList?: any;\r\n}\r\n\r\nexport interface OverflowState {\r\n menuOpen: boolean;\r\n}\r\n\r\nexport interface ITaskInfo {\r\n title?: string;\r\n height?: number;\r\n width?: number;\r\n url?: string;\r\n card?: string;\r\n fallbackUrl?: string;\r\n completionBotId?: string;\r\n}\r\n\r\nclass Overflow extends React.Component {\r\n readonly localize: TFunction;\r\n constructor(props: OverflowProps) {\r\n super(props);\r\n this.localize = this.props.t;\r\n this.state = {\r\n menuOpen: false,\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n }\r\n\r\n public render(): JSX.Element {\r\n const items = [\r\n {\r\n key: 'more',\r\n icon: {\r\n name: 'more',\r\n outline: true,\r\n },\r\n menuOpen: this.state.menuOpen,\r\n active: this.state.menuOpen,\r\n indicator: false,\r\n menu: {\r\n items: [\r\n {\r\n key: 'status',\r\n content: this.localize(\"ViewStatus\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n let url = getBaseUrl() + \"/viewstatus/\" + this.props.message.id + \"?locale={locale}\";\r\n this.onOpenTaskModule(null, url, this.localize(\"ViewStatus\"));\r\n }\r\n },\r\n {\r\n key: 'duplicate',\r\n content: this.localize(\"Duplicate\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n this.duplicateDraftMessage(this.props.message.id).then(() => {\r\n this.props.getDraftMessagesList();\r\n });\r\n }\r\n },\r\n ],\r\n },\r\n onMenuOpenChange: (e: any, { menuOpen }: any) => {\r\n this.setState({\r\n menuOpen: !this.state.menuOpen\r\n });\r\n },\r\n },\r\n ];\r\n\r\n return ;\r\n }\r\n\r\n private onOpenTaskModule = (event: any, url: string, title: string) => {\r\n let taskInfo: ITaskInfo = {\r\n url: url,\r\n title: title,\r\n height: 530,\r\n width: 1000,\r\n fallbackUrl: url,\r\n };\r\n let submitHandler = (err: any, result: any) => {\r\n };\r\n microsoftTeams.tasks.startTask(taskInfo, submitHandler);\r\n }\r\n\r\n private duplicateDraftMessage = async (id: number) => {\r\n try {\r\n await duplicateDraftNotification(id);\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { messagesList: state.messagesList };\r\n}\r\n\r\nconst overflowWithTranslation = withTranslation()(Overflow);\r\nexport default connect(mapStateToProps, { selectMessage, getMessagesList, getDraftMessagesList })(overflowWithTranslation);\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { TooltipHost } from 'office-ui-fabric-react';\r\nimport { initializeIcons } from 'office-ui-fabric-react/lib/Icons';\r\nimport { Icon, Loader, List, Flex, Text } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nimport { selectMessage, getMessagesList, getDraftMessagesList } from '../../actions';\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport Overflow from '../OverFlow/sentMessageOverflow';\r\nimport './messages.scss';\r\nimport { TFunction } from \"i18next\";\r\nimport { formatNumber } from '../../i18n';\r\n\r\nexport interface ITaskInfo {\r\n title?: string;\r\n height?: number;\r\n width?: number;\r\n url?: string;\r\n card?: string;\r\n fallbackUrl?: string;\r\n completionBotId?: string;\r\n}\r\n\r\nexport interface IMessage {\r\n title: string;\r\n sentDate: string;\r\n recipients: string;\r\n acknowledgements?: string;\r\n reactions?: string;\r\n responses?: string;\r\n}\r\n\r\nexport interface IMessageProps extends WithTranslation {\r\n messagesList: IMessage[];\r\n selectMessage?: any;\r\n getMessagesList?: any;\r\n getDraftMessagesList?: any;\r\n}\r\n\r\nexport interface IMessageState {\r\n message: IMessage[];\r\n loader: boolean;\r\n}\r\n\r\nclass Messages extends React.Component {\r\n readonly localize: TFunction;\r\n private interval: any;\r\n private isOpenTaskModuleAllowed: boolean;\r\n constructor(props: IMessageProps) {\r\n super(props);\r\n initializeIcons();\r\n this.localize = this.props.t;\r\n this.isOpenTaskModuleAllowed = true;\r\n this.state = {\r\n message: this.props.messagesList,\r\n loader: true,\r\n };\r\n this.escFunction = this.escFunction.bind(this);\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n this.props.getMessagesList();\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n this.interval = setInterval(() => {\r\n this.props.getMessagesList();\r\n }, 60000);\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n clearInterval(this.interval);\r\n }\r\n\r\n public componentWillReceiveProps(nextProps: any) {\r\n if (this.props !== nextProps) {\r\n this.setState({\r\n message: nextProps.messagesList,\r\n loader: false\r\n });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n let keyCount = 0;\r\n const processItem = (message: any) => {\r\n keyCount++;\r\n const out = {\r\n key: keyCount,\r\n content: this.messageContent(message),\r\n onClick: (): void => {\r\n let url = getBaseUrl() + \"/viewstatus/\" + message.id + \"?locale={locale}\";\r\n this.onOpenTaskModule(null, url, this.localize(\"ViewStatus\"));\r\n },\r\n styles: { margin: '0.2rem 0.2rem 0 0' },\r\n };\r\n return out;\r\n };\r\n\r\n const label = this.processLabels();\r\n const outList = this.state.message.map(processItem);\r\n const allMessages = [...label, ...outList];\r\n\r\n if (this.state.loader) {\r\n return (\r\n \r\n );\r\n } else if (this.state.message.length === 0) {\r\n return (
{this.localize(\"EmptySentMessages\")}
);\r\n }\r\n else {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n\r\n private processLabels = () => {\r\n const out = [{\r\n key: \"labels\",\r\n content: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n styles: { margin: '0.2rem 0.2rem 0 0' },\r\n }];\r\n return out;\r\n }\r\n\r\n private renderSendingText = (message: any) => {\r\n var text = \"\";\r\n switch (message.status) {\r\n case \"Queued\":\r\n text = this.localize(\"Queued\");\r\n break;\r\n case \"SyncingRecipients\":\r\n text = this.localize(\"SyncingRecipients\");\r\n break;\r\n case \"InstallingApp\":\r\n text = this.localize(\"InstallingApp\");\r\n break;\r\n case \"Sending\":\r\n let sentCount =\r\n (message.succeeded ? message.succeeded : 0) +\r\n (message.failed ? message.failed : 0) +\r\n (message.unknown ? message.unknown : 0);\r\n\r\n text = this.localize(\"SendingMessages\", { \"SentCount\": formatNumber(sentCount), \"TotalCount\": formatNumber(message.totalMessageCount) });\r\n break;\r\n case \"Sent\":\r\n case \"Failed\":\r\n text = \"\";\r\n }\r\n\r\n return ();\r\n }\r\n\r\n private messageContent = (message: any) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.renderSendingText(message)}\r\n \r\n \r\n
\r\n \r\n \r\n {formatNumber(message.succeeded)}\r\n \r\n \r\n \r\n {formatNumber(message.failed)}\r\n \r\n {\r\n message.unknown && \r\n \r\n \r\n {formatNumber(message.unknown)}\r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private escFunction = (event: any) => {\r\n if (event.keyCode === 27 || (event.key === \"Escape\")) {\r\n microsoftTeams.tasks.submitTask();\r\n }\r\n }\r\n\r\n public onOpenTaskModule = (event: any, url: string, title: string) => {\r\n if (this.isOpenTaskModuleAllowed) {\r\n this.isOpenTaskModuleAllowed = false;\r\n let taskInfo: ITaskInfo = {\r\n url: url,\r\n title: title,\r\n height: 530,\r\n width: 1000,\r\n fallbackUrl: url,\r\n }\r\n\r\n let submitHandler = (err: any, result: any) => {\r\n this.isOpenTaskModuleAllowed = true;\r\n };\r\n\r\n microsoftTeams.tasks.startTask(taskInfo, submitHandler);\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { messagesList: state.messagesList };\r\n}\r\n\r\nconst messagesWithTranslation = withTranslation()(Messages);\r\nexport default connect(mapStateToProps, { selectMessage, getMessagesList, getDraftMessagesList })(messagesWithTranslation);","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Menu } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport { selectMessage, getMessagesList, getDraftMessagesList } from '../../actions';\r\nimport { deleteDraftNotification, duplicateDraftNotification, sendPreview } from '../../apis/messageListApi';\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport interface OverflowProps extends WithTranslation {\r\n message: any;\r\n styles?: object;\r\n title?: string;\r\n selectMessage?: any;\r\n getMessagesList?: any;\r\n getDraftMessagesList?: any;\r\n}\r\n\r\nexport interface OverflowState {\r\n teamsTeamId?: string;\r\n teamsChannelId?: string;\r\n menuOpen: boolean;\r\n}\r\n\r\nexport interface ITaskInfo {\r\n title?: string;\r\n height?: number;\r\n width?: number;\r\n url?: string;\r\n card?: string;\r\n fallbackUrl?: string;\r\n completionBotId?: string;\r\n}\r\n\r\nclass Overflow extends React.Component {\r\n readonly localize: TFunction;\r\n constructor(props: OverflowProps) {\r\n super(props);\r\n this.localize = this.props.t;\r\n this.state = {\r\n teamsChannelId: '',\r\n teamsTeamId: '',\r\n menuOpen: false,\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n microsoftTeams.getContext((context) => {\r\n this.setState({\r\n teamsTeamId: context.teamId,\r\n teamsChannelId: context.channelId,\r\n });\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n const items = [\r\n {\r\n key: 'more',\r\n icon: {\r\n name: 'more',\r\n outline: true,\r\n },\r\n menuOpen: this.state.menuOpen,\r\n active: this.state.menuOpen,\r\n indicator: false,\r\n menu: {\r\n items: [\r\n {\r\n key: 'send',\r\n content: this.localize(\"Send\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n let url = getBaseUrl() + \"/sendconfirmation/\" + this.props.message.id + \"?locale={locale}\";\r\n this.onOpenTaskModule(null, url, this.localize(\"SendConfirmation\"));\r\n }\r\n },\r\n {\r\n key: 'preview',\r\n content: this.localize(\"PreviewInThisChannel\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n let payload = {\r\n draftNotificationId: this.props.message.id,\r\n teamsTeamId: this.state.teamsTeamId,\r\n teamsChannelId: this.state.teamsChannelId,\r\n }\r\n sendPreview(payload).then((response) => {\r\n return response.status;\r\n }).catch((error) => {\r\n return error;\r\n });\r\n }\r\n },\r\n {\r\n key: 'edit',\r\n content: this.localize(\"Edit\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n let url = getBaseUrl() + \"/newmessage/\" + this.props.message.id + \"?locale={locale}\";\r\n this.onOpenTaskModule(null, url, this.localize(\"EditMessage\"));\r\n }\r\n },\r\n {\r\n key: 'duplicate',\r\n content: this.localize(\"Duplicate\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n this.duplicateDraftMessage(this.props.message.id).then(() => {\r\n this.props.getDraftMessagesList();\r\n });\r\n }\r\n },\r\n {\r\n key: 'delete',\r\n content: this.localize(\"Delete\"),\r\n onClick: (event: any) => {\r\n event.stopPropagation();\r\n this.setState({\r\n menuOpen: false,\r\n });\r\n this.deleteDraftMessage(this.props.message.id).then(() => {\r\n this.props.getDraftMessagesList();\r\n });\r\n }\r\n },\r\n ],\r\n },\r\n onMenuOpenChange: (e: any, { menuOpen }: any) => {\r\n this.setState({\r\n menuOpen: !this.state.menuOpen\r\n });\r\n },\r\n },\r\n ];\r\n\r\n return ;\r\n }\r\n\r\n private onOpenTaskModule = (event: any, url: string, title: string) => {\r\n let taskInfo: ITaskInfo = {\r\n url: url,\r\n title: title,\r\n height: 530,\r\n width: 1000,\r\n fallbackUrl: url,\r\n };\r\n\r\n let submitHandler = (err: any, result: any) => {\r\n this.props.getDraftMessagesList().then(() => {\r\n this.props.getMessagesList();\r\n });\r\n };\r\n\r\n microsoftTeams.tasks.startTask(taskInfo, submitHandler);\r\n }\r\n\r\n private duplicateDraftMessage = async (id: number) => {\r\n try {\r\n await duplicateDraftNotification(id);\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n private deleteDraftMessage = async (id: number) => {\r\n try {\r\n await deleteDraftNotification(id);\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { messages: state.draftMessagesList, selectedMessage: state.selectedMessage };\r\n}\r\n\r\nconst overflowWithTranslation = withTranslation()(Overflow);\r\nexport default connect(mapStateToProps, { selectMessage, getDraftMessagesList, getMessagesList })(overflowWithTranslation);\r\n","import * as React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { initializeIcons } from 'office-ui-fabric-react/lib/Icons';\r\nimport { Loader, List, Flex, Text } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nimport './draftMessages.scss';\r\nimport { selectMessage, getDraftMessagesList, getMessagesList } from '../../actions';\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport Overflow from '../OverFlow/draftMessageOverflow';\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport interface ITaskInfo {\r\n title?: string;\r\n height?: number;\r\n width?: number;\r\n url?: string;\r\n card?: string;\r\n fallbackUrl?: string;\r\n completionBotId?: string;\r\n}\r\n\r\nexport interface IMessage {\r\n id: string;\r\n title: string;\r\n date: string;\r\n recipients: string;\r\n acknowledgements?: string;\r\n reactions?: string;\r\n responses?: string;\r\n}\r\n\r\nexport interface IMessageProps extends WithTranslation {\r\n messages: IMessage[];\r\n selectedMessage: any;\r\n selectMessage?: any;\r\n getDraftMessagesList?: any;\r\n getMessagesList?: any;\r\n}\r\n\r\nexport interface IMessageState {\r\n message: IMessage[];\r\n itemsAccount: number;\r\n loader: boolean;\r\n teamsTeamId?: string;\r\n teamsChannelId?: string;\r\n}\r\n\r\nclass DraftMessages extends React.Component {\r\n readonly localize: TFunction;\r\n private interval: any;\r\n private isOpenTaskModuleAllowed: boolean;\r\n\r\n constructor(props: IMessageProps) {\r\n super(props);\r\n initializeIcons();\r\n this.localize = this.props.t;\r\n this.isOpenTaskModuleAllowed = true;\r\n this.state = {\r\n message: props.messages,\r\n itemsAccount: this.props.messages.length,\r\n loader: true,\r\n teamsTeamId: \"\",\r\n teamsChannelId: \"\",\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n microsoftTeams.getContext((context) => {\r\n this.setState({\r\n teamsTeamId: context.teamId,\r\n teamsChannelId: context.channelId,\r\n });\r\n });\r\n this.props.getDraftMessagesList();\r\n this.interval = setInterval(() => {\r\n this.props.getDraftMessagesList();\r\n }, 60000);\r\n }\r\n\r\n public componentWillReceiveProps(nextProps: any) {\r\n this.setState({\r\n message: nextProps.messages,\r\n loader: false\r\n })\r\n }\r\n\r\n public componentWillUnmount() {\r\n clearInterval(this.interval);\r\n }\r\n\r\n public render(): JSX.Element {\r\n let keyCount = 0;\r\n const processItem = (message: any) => {\r\n keyCount++;\r\n const out = {\r\n key: keyCount,\r\n content: (\r\n \r\n \r\n {message.title}\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n styles: { margin: '0.2rem 0.2rem 0 0' },\r\n onClick: (): void => {\r\n let url = getBaseUrl() + \"/newmessage/\" + message.id + \"?locale={locale}\";\r\n this.onOpenTaskModule(null, url, this.localize(\"EditMessage\"));\r\n },\r\n };\r\n return out;\r\n };\r\n\r\n const label = this.processLabels();\r\n const outList = this.state.message.map(processItem);\r\n const allDraftMessages = [...label, ...outList];\r\n\r\n if (this.state.loader) {\r\n return (\r\n \r\n );\r\n } else if (this.state.message.length === 0) {\r\n return (
{this.localize(\"EmptyDraftMessages\")}
);\r\n }\r\n else {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n\r\n private processLabels = () => {\r\n const out = [{\r\n key: \"labels\",\r\n content: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ),\r\n styles: { margin: '0.2rem 0.2rem 0 0' },\r\n }];\r\n return out;\r\n }\r\n\r\n private onOpenTaskModule = (event: any, url: string, title: string) => {\r\n if (this.isOpenTaskModuleAllowed) {\r\n this.isOpenTaskModuleAllowed = false;\r\n let taskInfo: ITaskInfo = {\r\n url: url,\r\n title: title,\r\n height: 530,\r\n width: 1000,\r\n fallbackUrl: url,\r\n }\r\n\r\n let submitHandler = (err: any, result: any) => {\r\n this.props.getDraftMessagesList().then(() => {\r\n this.props.getMessagesList();\r\n this.isOpenTaskModuleAllowed = true;\r\n });\r\n };\r\n\r\n microsoftTeams.tasks.startTask(taskInfo, submitHandler);\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { messages: state.draftMessagesList, selectedMessage: state.selectedMessage };\r\n}\r\n\r\nconst draftMessagesWithTranslation = withTranslation()(DraftMessages);\r\nexport default connect(mapStateToProps, { selectMessage, getDraftMessagesList, getMessagesList })(draftMessagesWithTranslation);","import * as React from 'react';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport Messages from '../Messages/messages';\r\nimport DraftMessages from '../DraftMessages/draftMessages';\r\nimport './tabContainer.scss';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport { Accordion, Button } from '@stardust-ui/react';\r\nimport { getDraftMessagesList } from '../../actions';\r\nimport { connect } from 'react-redux';\r\nimport { TFunction } from \"i18next\";\r\n\r\ninterface ITaskInfo {\r\n title?: string;\r\n height?: number;\r\n width?: number;\r\n url?: string;\r\n card?: string;\r\n fallbackUrl?: string;\r\n completionBotId?: string;\r\n}\r\n\r\nexport interface ITaskInfoProps extends WithTranslation {\r\n getDraftMessagesList?: any;\r\n}\r\n\r\nexport interface ITabContainerState {\r\n url: string;\r\n}\r\n\r\nclass TabContainer extends React.Component {\r\n readonly localize: TFunction;\r\n constructor(props: ITaskInfoProps) {\r\n super(props);\r\n this.localize = this.props.t;\r\n this.state = {\r\n url: getBaseUrl() + \"/newmessage?locale={locale}\"\r\n }\r\n this.escFunction = this.escFunction.bind(this);\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n //- Handle the Esc key\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n public escFunction(event: any) {\r\n if (event.keyCode === 27 || (event.key === \"Escape\")) {\r\n microsoftTeams.tasks.submitTask();\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const panels = [\r\n {\r\n title: this.localize('DraftMessagesSectionTitle'),\r\n content: {\r\n key: 'sent',\r\n content: (\r\n
\r\n \r\n
\r\n ),\r\n },\r\n },\r\n {\r\n title: this.localize('SentMessagesSectionTitle'),\r\n content: {\r\n key: 'draft',\r\n content: (\r\n
\r\n \r\n
\r\n ),\r\n },\r\n }\r\n ]\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n public onNewMessage = () => {\r\n let taskInfo: ITaskInfo = {\r\n url: this.state.url,\r\n title: this.localize(\"NewMessage\"),\r\n height: 530,\r\n width: 1000,\r\n fallbackUrl: this.state.url,\r\n }\r\n\r\n let submitHandler = (err: any, result: any) => {\r\n this.props.getDraftMessagesList();\r\n };\r\n\r\n microsoftTeams.tasks.startTask(taskInfo, submitHandler);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { messages: state.draftMessagesList };\r\n}\r\n\r\nconst tabContainerWithTranslation = withTranslation()(TabContainer);\r\nexport default connect(mapStateToProps, { getDraftMessagesList })(tabContainerWithTranslation);","import { TFunction } from \"i18next\";\r\n\r\nexport const getInitAdaptiveCard = (t: TFunction) => {\r\n const titleTextAsString = t(\"TitleText\");\r\n return (\r\n {\r\n \"type\": \"AdaptiveCard\",\r\n \"body\": [\r\n {\r\n \"type\": \"TextBlock\",\r\n \"weight\": \"Bolder\",\r\n \"text\": titleTextAsString,\r\n \"size\": \"ExtraLarge\",\r\n \"wrap\": true\r\n },\r\n {\r\n \"type\": \"Image\",\r\n \"spacing\": \"Default\",\r\n \"url\": \"\",\r\n \"size\": \"Stretch\",\r\n \"width\": \"400px\",\r\n \"altText\": \"\"\r\n },\r\n {\r\n \"type\": \"TextBlock\",\r\n \"text\": \"\",\r\n \"wrap\": true\r\n },\r\n {\r\n \"type\": \"TextBlock\",\r\n \"wrap\": true,\r\n \"size\": \"Small\",\r\n \"weight\": \"Lighter\",\r\n \"text\": \"\"\r\n }\r\n ],\r\n \"$schema\": \"https://adaptivecards.io/schemas/adaptive-card.json\",\r\n \"version\": \"1.0\"\r\n }\r\n );\r\n}\r\n\r\nexport const getCardTitle = (card: any) => {\r\n return card.body[0].text;\r\n}\r\n\r\nexport const setCardTitle = (card: any, title: string) => {\r\n card.body[0].text = title;\r\n}\r\n\r\nexport const getCardImageLink = (card: any) => {\r\n return card.body[1].url;\r\n}\r\n\r\nexport const setCardImageLink = (card: any, imageLink?: string) => {\r\n card.body[1].url = imageLink;\r\n}\r\n\r\nexport const getCardSummary = (card: any) => {\r\n return card.body[2].text;\r\n}\r\n\r\nexport const setCardSummary = (card: any, summary?: string) => {\r\n card.body[2].text = summary;\r\n}\r\n\r\nexport const getCardAuthor = (card: any) => {\r\n return card.body[3].text;\r\n}\r\n\r\nexport const setCardAuthor = (card: any, author?: string) => {\r\n card.body[3].text = author;\r\n}\r\n\r\nexport const getCardBtnTitle = (card: any) => {\r\n return card.actions[0].title;\r\n}\r\n\r\nexport const getCardBtnLink = (card: any) => {\r\n return card.actions[0].url;\r\n}\r\n\r\nexport const setCardBtn = (card: any, buttonTitle?: string, buttonLink?: string) => {\r\n if (buttonTitle && buttonLink) {\r\n card.actions = [\r\n {\r\n \"type\": \"Action.OpenUrl\",\r\n \"title\": buttonTitle,\r\n \"url\": buttonLink\r\n }\r\n ];\r\n } else {\r\n delete card.actions;\r\n }\r\n}\r\n","import ColorHash from \"color-hash\";\r\n\r\nexport class ImageUtil {\r\n\r\n public static makeInitialImage = (name: string) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.style.display = 'none';\r\n canvas.width = 32;\r\n canvas.height = 32;\r\n document.body.appendChild(canvas);\r\n const context = canvas.getContext('2d');\r\n if (context) {\r\n let colorHash = new ColorHash();\r\n const colorNum = colorHash.hex(name);\r\n context.fillStyle = colorNum;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n context.font = \"16px Arial\";\r\n context.fillStyle = \"#fff\";\r\n const split = name.split(' ');\r\n const len = split.length;\r\n const first = split[0][0];\r\n if (len > 1) {\r\n const last = split[len - 1][0];\r\n const initials = first + last;\r\n context.fillText(initials.toUpperCase(), 3, 23);\r\n } else {\r\n context.fillText(first.toUpperCase(), 10, 23);\r\n }\r\n const data = canvas.toDataURL();\r\n document.body.removeChild(canvas);\r\n return data;\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Input, TextArea, Radiobutton, RadiobuttonGroup } from 'msteams-ui-components-react';\r\nimport { initializeIcons } from 'office-ui-fabric-react/lib/Icons';\r\nimport * as AdaptiveCards from \"adaptivecards\";\r\nimport { Button, Loader, Dropdown, Text } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nimport './newMessage.scss';\r\nimport './teamTheme.scss';\r\nimport { getDraftNotification, getTeams, createDraftNotification, updateDraftNotification, searchGroups, getGroups, verifyGroupAccess } from '../../apis/messageListApi';\r\nimport {\r\n getInitAdaptiveCard, setCardTitle, setCardImageLink, setCardSummary,\r\n setCardAuthor, setCardBtn\r\n} from '../AdaptiveCard/adaptiveCard';\r\nimport { getBaseUrl } from '../../configVariables';\r\nimport { ImageUtil } from '../../utility/imageutility';\r\nimport { TFunction } from \"i18next\";\r\n\r\ntype dropdownItem = {\r\n key: string,\r\n header: string,\r\n content: string,\r\n image: string,\r\n team: {\r\n id: string,\r\n },\r\n}\r\n\r\nexport interface IDraftMessage {\r\n id?: string,\r\n title: string,\r\n imageLink?: string,\r\n summary?: string,\r\n author: string,\r\n buttonTitle?: string,\r\n buttonLink?: string,\r\n teams: any[],\r\n rosters: any[],\r\n groups: any[],\r\n allUsers: boolean\r\n}\r\n\r\nexport interface formState {\r\n title: string,\r\n summary?: string,\r\n btnLink?: string,\r\n imageLink?: string,\r\n btnTitle?: string,\r\n author: string,\r\n card?: any,\r\n page: string,\r\n teamsOptionSelected: boolean,\r\n rostersOptionSelected: boolean,\r\n allUsersOptionSelected: boolean,\r\n groupsOptionSelected: boolean,\r\n teams?: any[],\r\n groups?: any[],\r\n exists?: boolean,\r\n messageId: string,\r\n loader: boolean,\r\n groupAccess: boolean,\r\n loading: boolean,\r\n noResultMessage: string,\r\n unstablePinned?: boolean,\r\n selectedTeamsNum: number,\r\n selectedRostersNum: number,\r\n selectedGroupsNum: number,\r\n selectedRadioBtn: string,\r\n selectedTeams: dropdownItem[],\r\n selectedRosters: dropdownItem[],\r\n selectedGroups: dropdownItem[],\r\n errorImageUrlMessage: string,\r\n errorButtonUrlMessage: string,\r\n}\r\n\r\nexport interface INewMessageProps extends RouteComponentProps, WithTranslation {\r\n getDraftMessagesList?: any;\r\n}\r\n\r\nclass NewMessage extends React.Component {\r\n readonly localize: TFunction;\r\n private card: any;\r\n\r\n constructor(props: INewMessageProps) {\r\n super(props);\r\n initializeIcons();\r\n this.localize = this.props.t;\r\n this.card = getInitAdaptiveCard(this.localize);\r\n this.setDefaultCard(this.card);\r\n\r\n this.state = {\r\n title: \"\",\r\n summary: \"\",\r\n author: \"\",\r\n btnLink: \"\",\r\n imageLink: \"\",\r\n btnTitle: \"\",\r\n card: this.card,\r\n page: \"CardCreation\",\r\n teamsOptionSelected: true,\r\n rostersOptionSelected: false,\r\n allUsersOptionSelected: false,\r\n groupsOptionSelected: false,\r\n messageId: \"\",\r\n loader: true,\r\n groupAccess: false,\r\n loading: false,\r\n noResultMessage: \"\",\r\n unstablePinned: true,\r\n selectedTeamsNum: 0,\r\n selectedRostersNum: 0,\r\n selectedGroupsNum: 0,\r\n selectedRadioBtn: \"teams\",\r\n selectedTeams: [],\r\n selectedRosters: [],\r\n selectedGroups: [],\r\n errorImageUrlMessage: \"\",\r\n errorButtonUrlMessage: \"\",\r\n }\r\n }\r\n\r\n public async componentDidMount() {\r\n microsoftTeams.initialize();\r\n //- Handle the Esc key\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n let params = this.props.match.params;\r\n this.setGroupAccess();\r\n this.getTeamList().then(() => {\r\n if ('id' in params) {\r\n let id = params['id'];\r\n this.getItem(id).then(() => {\r\n const selectedTeams = this.makeDropdownItemList(this.state.selectedTeams, this.state.teams);\r\n const selectedRosters = this.makeDropdownItemList(this.state.selectedRosters, this.state.teams);\r\n this.setState({\r\n exists: true,\r\n messageId: id,\r\n selectedTeams: selectedTeams,\r\n selectedRosters: selectedRosters,\r\n })\r\n });\r\n this.getGroupData(id).then(() => {\r\n const selectedGroups = this.makeDropdownItems(this.state.groups);\r\n this.setState({\r\n selectedGroups: selectedGroups\r\n })\r\n });\r\n } else {\r\n this.setState({\r\n exists: false,\r\n loader: false\r\n }, () => {\r\n let adaptiveCard = new AdaptiveCards.AdaptiveCard();\r\n adaptiveCard.parse(this.state.card);\r\n let renderedCard = adaptiveCard.render();\r\n document.getElementsByClassName('adaptiveCardContainer')[0].appendChild(renderedCard);\r\n if (this.state.btnLink) {\r\n let link = this.state.btnLink;\r\n adaptiveCard.onExecuteAction = function (action) { window.open(link, '_blank'); };\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private makeDropdownItems = (items: any[] | undefined) => {\r\n const resultedTeams: dropdownItem[] = [];\r\n if (items) {\r\n items.forEach((element) => {\r\n resultedTeams.push({\r\n key: element.id,\r\n header: element.name,\r\n content: element.mail,\r\n image: ImageUtil.makeInitialImage(element.name),\r\n team: {\r\n id: element.id\r\n },\r\n\r\n });\r\n });\r\n }\r\n return resultedTeams;\r\n }\r\n\r\n private makeDropdownItemList = (items: any[], fromItems: any[] | undefined) => {\r\n const dropdownItemList: dropdownItem[] = [];\r\n items.forEach(element =>\r\n dropdownItemList.push(\r\n typeof element !== \"string\" ? element : {\r\n key: fromItems!.find(x => x.id === element).id,\r\n header: fromItems!.find(x => x.id === element).name,\r\n image: ImageUtil.makeInitialImage(fromItems!.find(x => x.id === element).name),\r\n team: {\r\n id: element\r\n }\r\n })\r\n );\r\n return dropdownItemList;\r\n }\r\n\r\n public setDefaultCard = (card: any) => {\r\n const titleAsString = this.localize(\"TitleText\");\r\n const summaryAsString = this.localize(\"Summary\");\r\n const authorAsString = this.localize(\"Author1\");\r\n const buttonTitleAsString = this.localize(\"ButtonTitle\");\r\n\r\n setCardTitle(card, titleAsString);\r\n let imgUrl = getBaseUrl() + \"/image/imagePlaceholder.png\";\r\n setCardImageLink(card, imgUrl);\r\n setCardSummary(card, summaryAsString);\r\n setCardAuthor(card, authorAsString);\r\n setCardBtn(card, buttonTitleAsString, \"https://adaptivecards.io\");\r\n }\r\n\r\n private getTeamList = async () => {\r\n try {\r\n const response = await getTeams();\r\n this.setState({\r\n teams: response.data\r\n });\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n private getGroupItems() {\r\n if (this.state.groups) {\r\n return this.makeDropdownItems(this.state.groups);\r\n }\r\n const dropdownItems: dropdownItem[] = [];\r\n return dropdownItems;\r\n }\r\n\r\n private setGroupAccess = async () => {\r\n await verifyGroupAccess().then(() => {\r\n this.setState({\r\n groupAccess: true\r\n });\r\n }).catch((error) => {\r\n const errorStatus = error.response.status;\r\n if (errorStatus === 403) {\r\n this.setState({\r\n groupAccess: false\r\n });\r\n }\r\n else {\r\n throw error;\r\n }\r\n });\r\n }\r\n\r\n private getGroupData = async (id: number) => {\r\n try {\r\n const response = await getGroups(id);\r\n this.setState({\r\n groups: response.data\r\n });\r\n }\r\n catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n private getItem = async (id: number) => {\r\n try {\r\n const response = await getDraftNotification(id);\r\n const draftMessageDetail = response.data;\r\n let selectedRadioButton = \"teams\";\r\n if (draftMessageDetail.rosters.length > 0) {\r\n selectedRadioButton = \"rosters\";\r\n }\r\n else if (draftMessageDetail.groups.length > 0) {\r\n selectedRadioButton = \"groups\";\r\n }\r\n else if (draftMessageDetail.allUsers) {\r\n selectedRadioButton = \"allUsers\";\r\n }\r\n this.setState({\r\n teamsOptionSelected: draftMessageDetail.teams.length > 0,\r\n selectedTeamsNum: draftMessageDetail.teams.length,\r\n rostersOptionSelected: draftMessageDetail.rosters.length > 0,\r\n selectedRostersNum: draftMessageDetail.rosters.length,\r\n groupsOptionSelected: draftMessageDetail.groups.length > 0,\r\n selectedGroupsNum: draftMessageDetail.groups.length,\r\n selectedRadioBtn: selectedRadioButton,\r\n selectedTeams: draftMessageDetail.teams,\r\n selectedRosters: draftMessageDetail.rosters,\r\n selectedGroups: draftMessageDetail.groups\r\n });\r\n\r\n setCardTitle(this.card, draftMessageDetail.title);\r\n setCardImageLink(this.card, draftMessageDetail.imageLink);\r\n setCardSummary(this.card, draftMessageDetail.summary);\r\n setCardAuthor(this.card, draftMessageDetail.author);\r\n setCardBtn(this.card, draftMessageDetail.buttonTitle, draftMessageDetail.buttonLink);\r\n\r\n this.setState({\r\n title: draftMessageDetail.title,\r\n summary: draftMessageDetail.summary,\r\n btnLink: draftMessageDetail.buttonLink,\r\n imageLink: draftMessageDetail.imageLink,\r\n btnTitle: draftMessageDetail.buttonTitle,\r\n author: draftMessageDetail.author,\r\n allUsersOptionSelected: draftMessageDetail.allUsers,\r\n loader: false\r\n }, () => {\r\n this.updateCard();\r\n });\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n public componentWillUnmount() {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.state.loader) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n if (this.state.page === \"CardCreation\") {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n else if (this.state.page === \"AudienceSelection\") {\r\n return (\r\n
\r\n
\r\n
\r\n

{this.localize(\"SendHeadingText\")}

\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n } else {\r\n return (
Error
);\r\n }\r\n }\r\n }\r\n\r\n private onGroupSelected = (value: any) => {\r\n this.setState({\r\n selectedRadioBtn: value,\r\n teamsOptionSelected: value === 'teams',\r\n rostersOptionSelected: value === 'rosters',\r\n groupsOptionSelected: value === 'groups',\r\n allUsersOptionSelected: value === 'allUsers',\r\n selectedTeams: value === 'teams' ? this.state.selectedTeams : [],\r\n selectedTeamsNum: value === 'teams' ? this.state.selectedTeamsNum : 0,\r\n selectedRosters: value === 'rosters' ? this.state.selectedRosters : [],\r\n selectedRostersNum: value === 'rosters' ? this.state.selectedRostersNum : 0,\r\n selectedGroups: value === 'groups' ? this.state.selectedGroups : [],\r\n selectedGroupsNum: value === 'groups' ? this.state.selectedGroupsNum : 0,\r\n });\r\n }\r\n\r\n private isSaveBtnDisabled = () => {\r\n const teamsSelectionIsValid = (this.state.teamsOptionSelected && (this.state.selectedTeamsNum !== 0)) || (!this.state.teamsOptionSelected);\r\n const rostersSelectionIsValid = (this.state.rostersOptionSelected && (this.state.selectedRostersNum !== 0)) || (!this.state.rostersOptionSelected);\r\n const groupsSelectionIsValid = (this.state.groupsOptionSelected && (this.state.selectedGroupsNum !== 0)) || (!this.state.groupsOptionSelected);\r\n const nothingSelected = (!this.state.teamsOptionSelected) && (!this.state.rostersOptionSelected) && (!this.state.groupsOptionSelected) && (!this.state.allUsersOptionSelected);\r\n return (!teamsSelectionIsValid || !rostersSelectionIsValid || !groupsSelectionIsValid || nothingSelected)\r\n }\r\n\r\n private isNextBtnDisabled = () => {\r\n const title = this.state.title;\r\n const btnTitle = this.state.btnTitle;\r\n const btnLink = this.state.btnLink;\r\n return !(title && ((btnTitle && btnLink) || (!btnTitle && !btnLink)) && (this.state.errorImageUrlMessage === \"\") && (this.state.errorButtonUrlMessage === \"\"));\r\n }\r\n\r\n private getItems = () => {\r\n const resultedTeams: dropdownItem[] = [];\r\n if (this.state.teams) {\r\n let remainingUserTeams = this.state.teams;\r\n if (this.state.selectedRadioBtn !== \"allUsers\") {\r\n if (this.state.selectedRadioBtn === \"teams\") {\r\n this.state.teams.filter(x => this.state.selectedTeams.findIndex(y => y.team.id === x.id) < 0);\r\n }\r\n else if (this.state.selectedRadioBtn === \"rosters\") {\r\n this.state.teams.filter(x => this.state.selectedRosters.findIndex(y => y.team.id === x.id) < 0);\r\n }\r\n }\r\n remainingUserTeams.forEach((element) => {\r\n resultedTeams.push({\r\n key: element.id,\r\n header: element.name,\r\n content: element.mail,\r\n image: ImageUtil.makeInitialImage(element.name),\r\n team: {\r\n id: element.id\r\n }\r\n });\r\n });\r\n }\r\n return resultedTeams;\r\n }\r\n\r\n private static MAX_SELECTED_TEAMS_NUM: number = 20;\r\n\r\n private onTeamsChange = (event: any, itemsData: any) => {\r\n if (itemsData.value.length > NewMessage.MAX_SELECTED_TEAMS_NUM) return;\r\n this.setState({\r\n selectedTeams: itemsData.value,\r\n selectedTeamsNum: itemsData.value.length,\r\n selectedRosters: [],\r\n selectedRostersNum: 0,\r\n selectedGroups: [],\r\n selectedGroupsNum: 0\r\n })\r\n }\r\n\r\n private onRostersChange = (event: any, itemsData: any) => {\r\n if (itemsData.value.length > NewMessage.MAX_SELECTED_TEAMS_NUM) return;\r\n this.setState({\r\n selectedRosters: itemsData.value,\r\n selectedRostersNum: itemsData.value.length,\r\n selectedTeams: [],\r\n selectedTeamsNum: 0,\r\n selectedGroups: [],\r\n selectedGroupsNum: 0\r\n })\r\n }\r\n\r\n private onGroupsChange = (event: any, itemsData: any) => {\r\n this.setState({\r\n selectedGroups: itemsData.value,\r\n selectedGroupsNum: itemsData.value.length,\r\n groups: [],\r\n selectedTeams: [],\r\n selectedTeamsNum: 0,\r\n selectedRosters: [],\r\n selectedRostersNum: 0\r\n })\r\n }\r\n\r\n private onGroupSearch = (itemList: any, searchQuery: string) => {\r\n const result = itemList.filter(\r\n (item: { header: string; content: string; }) => (item.header && item.header.toLowerCase().indexOf(searchQuery.toLowerCase()) !== -1) ||\r\n (item.content && item.content.toLowerCase().indexOf(searchQuery.toLowerCase()) !== -1),\r\n )\r\n return result;\r\n }\r\n\r\n private onGroupSearchQueryChange = async (event: any, itemsData: any) => {\r\n\r\n if (!itemsData.searchQuery) {\r\n this.setState({\r\n groups: [],\r\n noResultMessage: \"\",\r\n });\r\n }\r\n else if (itemsData.searchQuery && itemsData.searchQuery.length <= 2) {\r\n this.setState({\r\n loading: false,\r\n noResultMessage: \"No matches found.\",\r\n });\r\n }\r\n else if (itemsData.searchQuery && itemsData.searchQuery.length > 2) {\r\n // handle event trigger on item select.\r\n const result = itemsData.items && itemsData.items.find(\r\n (item: { header: string; }) => item.header.toLowerCase() === itemsData.searchQuery.toLowerCase()\r\n )\r\n if (result) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n loading: true,\r\n noResultMessage: \"\",\r\n });\r\n\r\n try {\r\n const query = encodeURIComponent(itemsData.searchQuery);\r\n const response = await searchGroups(query);\r\n this.setState({\r\n groups: response.data,\r\n loading: false,\r\n noResultMessage: \"No matches found.\"\r\n });\r\n }\r\n catch (error) {\r\n return error;\r\n }\r\n }\r\n }\r\n\r\n private onSave = () => {\r\n const selectedTeams: string[] = [];\r\n const selctedRosters: string[] = [];\r\n const selectedGroups: string[] = [];\r\n this.state.selectedTeams.forEach(x => selectedTeams.push(x.team.id));\r\n this.state.selectedRosters.forEach(x => selctedRosters.push(x.team.id));\r\n this.state.selectedGroups.forEach(x => selectedGroups.push(x.team.id));\r\n\r\n const draftMessage: IDraftMessage = {\r\n id: this.state.messageId,\r\n title: this.state.title,\r\n imageLink: this.state.imageLink,\r\n summary: this.state.summary,\r\n author: this.state.author,\r\n buttonTitle: this.state.btnTitle,\r\n buttonLink: this.state.btnLink,\r\n teams: selectedTeams,\r\n rosters: selctedRosters,\r\n groups: selectedGroups,\r\n allUsers: this.state.allUsersOptionSelected\r\n };\r\n\r\n if (this.state.exists) {\r\n this.editDraftMessage(draftMessage).then(() => {\r\n microsoftTeams.tasks.submitTask();\r\n });\r\n } else {\r\n this.postDraftMessage(draftMessage).then(() => {\r\n microsoftTeams.tasks.submitTask();\r\n });\r\n }\r\n }\r\n\r\n private editDraftMessage = async (draftMessage: IDraftMessage) => {\r\n try {\r\n await updateDraftNotification(draftMessage);\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n private postDraftMessage = async (draftMessage: IDraftMessage) => {\r\n try {\r\n await createDraftNotification(draftMessage);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public escFunction(event: any) {\r\n if (event.keyCode === 27 || (event.key === \"Escape\")) {\r\n microsoftTeams.tasks.submitTask();\r\n }\r\n }\r\n\r\n private onNext = (event: any) => {\r\n this.setState({\r\n page: \"AudienceSelection\"\r\n }, () => {\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onBack = (event: any) => {\r\n this.setState({\r\n page: \"CardCreation\"\r\n }, () => {\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onTitleChanged = (event: any) => {\r\n let showDefaultCard = (!event.target.value && !this.state.imageLink && !this.state.summary && !this.state.author && !this.state.btnTitle && !this.state.btnLink);\r\n setCardTitle(this.card, event.target.value);\r\n setCardImageLink(this.card, this.state.imageLink);\r\n setCardSummary(this.card, this.state.summary);\r\n setCardAuthor(this.card, this.state.author);\r\n setCardBtn(this.card, this.state.btnTitle, this.state.btnLink);\r\n this.setState({\r\n title: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onImageLinkChanged = (event: any) => {\r\n let url = event.target.value.toLowerCase();\r\n if (!((url === \"\") || (url.startsWith(\"https://\") || (url.startsWith(\"data:image/png;base64,\")) || (url.startsWith(\"data:image/jpeg;base64,\")) || (url.startsWith(\"data:image/gif;base64,\"))))) {\r\n this.setState({\r\n errorImageUrlMessage: \"URL must start with https://\"\r\n });\r\n } else {\r\n this.setState({\r\n errorImageUrlMessage: \"\"\r\n });\r\n }\r\n\r\n let showDefaultCard = (!this.state.title && !event.target.value && !this.state.summary && !this.state.author && !this.state.btnTitle && !this.state.btnLink);\r\n setCardTitle(this.card, this.state.title);\r\n setCardImageLink(this.card, event.target.value);\r\n setCardSummary(this.card, this.state.summary);\r\n setCardAuthor(this.card, this.state.author);\r\n setCardBtn(this.card, this.state.btnTitle, this.state.btnLink);\r\n this.setState({\r\n imageLink: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onSummaryChanged = (event: any) => {\r\n let showDefaultCard = (!this.state.title && !this.state.imageLink && !event.target.value && !this.state.author && !this.state.btnTitle && !this.state.btnLink);\r\n setCardTitle(this.card, this.state.title);\r\n setCardImageLink(this.card, this.state.imageLink);\r\n setCardSummary(this.card, event.target.value);\r\n setCardAuthor(this.card, this.state.author);\r\n setCardBtn(this.card, this.state.btnTitle, this.state.btnLink);\r\n this.setState({\r\n summary: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onAuthorChanged = (event: any) => {\r\n let showDefaultCard = (!this.state.title && !this.state.imageLink && !this.state.summary && !event.target.value && !this.state.btnTitle && !this.state.btnLink);\r\n setCardTitle(this.card, this.state.title);\r\n setCardImageLink(this.card, this.state.imageLink);\r\n setCardSummary(this.card, this.state.summary);\r\n setCardAuthor(this.card, event.target.value);\r\n setCardBtn(this.card, this.state.btnTitle, this.state.btnLink);\r\n this.setState({\r\n author: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n\r\n private onBtnTitleChanged = (event: any) => {\r\n const showDefaultCard = (!this.state.title && !this.state.imageLink && !this.state.summary && !this.state.author && !event.target.value && !this.state.btnLink);\r\n setCardTitle(this.card, this.state.title);\r\n setCardImageLink(this.card, this.state.imageLink);\r\n setCardSummary(this.card, this.state.summary);\r\n setCardAuthor(this.card, this.state.author);\r\n if (event.target.value && this.state.btnLink) {\r\n setCardBtn(this.card, event.target.value, this.state.btnLink);\r\n this.setState({\r\n btnTitle: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n } else {\r\n delete this.card.actions;\r\n this.setState({\r\n btnTitle: event.target.value,\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n }\r\n\r\n private onBtnLinkChanged = (event: any) => {\r\n if (!(event.target.value === \"\" || event.target.value.toLowerCase().startsWith(\"https://\"))) {\r\n this.setState({\r\n errorButtonUrlMessage: \"URL must start with https://\"\r\n });\r\n } else {\r\n this.setState({\r\n errorButtonUrlMessage: \"\"\r\n });\r\n }\r\n\r\n const showDefaultCard = (!this.state.title && !this.state.imageLink && !this.state.summary && !this.state.author && !this.state.btnTitle && !event.target.value);\r\n setCardTitle(this.card, this.state.title);\r\n setCardSummary(this.card, this.state.summary);\r\n setCardAuthor(this.card, this.state.author);\r\n setCardImageLink(this.card, this.state.imageLink);\r\n if (this.state.btnTitle && event.target.value) {\r\n setCardBtn(this.card, this.state.btnTitle, event.target.value);\r\n this.setState({\r\n btnLink: event.target.value,\r\n card: this.card\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n } else {\r\n delete this.card.actions;\r\n this.setState({\r\n btnLink: event.target.value\r\n }, () => {\r\n if (showDefaultCard) {\r\n this.setDefaultCard(this.card);\r\n }\r\n this.updateCard();\r\n });\r\n }\r\n }\r\n\r\n private updateCard = () => {\r\n const adaptiveCard = new AdaptiveCards.AdaptiveCard();\r\n adaptiveCard.parse(this.state.card);\r\n const renderedCard = adaptiveCard.render();\r\n const container = document.getElementsByClassName('adaptiveCardContainer')[0].firstChild;\r\n if (container != null) {\r\n container.replaceWith(renderedCard);\r\n } else {\r\n document.getElementsByClassName('adaptiveCardContainer')[0].appendChild(renderedCard);\r\n }\r\n const link = this.state.btnLink;\r\n adaptiveCard.onExecuteAction = function (action) { window.open(link, '_blank'); }\r\n }\r\n}\r\n\r\nconst newMessageWithTranslation = withTranslation()(NewMessage);\r\nexport default newMessageWithTranslation;\r\n","import * as React from 'react';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport './statusTaskModule.scss';\r\nimport { getSentNotification, exportNotification } from '../../apis/messageListApi';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport * as AdaptiveCards from \"adaptivecards\";\r\nimport { initializeIcons } from 'office-ui-fabric-react/lib/Icons';\r\nimport { TooltipHost } from 'office-ui-fabric-react';\r\nimport { Icon, Loader, List, Image, Button, IconProps } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport {\r\n getInitAdaptiveCard, setCardTitle, setCardImageLink, setCardSummary,\r\n setCardAuthor, setCardBtn\r\n} from '../AdaptiveCard/adaptiveCard';\r\nimport { ImageUtil } from '../../utility/imageutility';\r\nimport { formatDate, formatDuration, formatNumber } from '../../i18n';\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport interface IListItem {\r\n header: string,\r\n media: JSX.Element,\r\n}\r\n\r\nexport interface IMessage {\r\n id: string;\r\n title: string;\r\n acknowledgements?: string;\r\n reactions?: string;\r\n responses?: string;\r\n succeeded?: string;\r\n failed?: string;\r\n unknown?: string;\r\n sentDate?: string;\r\n imageLink?: string;\r\n summary?: string;\r\n author?: string;\r\n buttonLink?: string;\r\n buttonTitle?: string;\r\n teamNames?: string[];\r\n rosterNames?: string[];\r\n groupNames?: string[];\r\n allUsers?: boolean;\r\n sendingStartedDate?: string;\r\n sendingDuration?: string;\r\n errorMessage?: string;\r\n warningMessage?: string;\r\n canDownload?: boolean;\r\n sendingCompleted?: boolean;\r\n}\r\n\r\nexport interface IStatusState {\r\n message: IMessage;\r\n loader: boolean;\r\n page: string;\r\n teamId?: string;\r\n}\r\n\r\ninterface StatusTaskModuleProps extends RouteComponentProps, WithTranslation { }\r\n\r\nclass StatusTaskModule extends React.Component {\r\n readonly localize: TFunction;\r\n private initMessage = {\r\n id: \"\",\r\n title: \"\"\r\n };\r\n\r\n private card: any;\r\n\r\n constructor(props: StatusTaskModuleProps) {\r\n super(props);\r\n initializeIcons();\r\n\r\n this.localize = this.props.t;\r\n\r\n this.card = getInitAdaptiveCard(this.props.t);\r\n\r\n this.state = {\r\n message: this.initMessage,\r\n loader: true,\r\n page: \"ViewStatus\",\r\n teamId: '',\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n let params = this.props.match.params;\r\n microsoftTeams.initialize();\r\n microsoftTeams.getContext((context) => {\r\n this.setState({\r\n teamId: context.teamId,\r\n });\r\n });\r\n\r\n if ('id' in params) {\r\n let id = params['id'];\r\n this.getItem(id).then(() => {\r\n this.setState({\r\n loader: false\r\n }, () => {\r\n setCardTitle(this.card, this.state.message.title);\r\n setCardImageLink(this.card, this.state.message.imageLink);\r\n setCardSummary(this.card, this.state.message.summary);\r\n setCardAuthor(this.card, this.state.message.author);\r\n if (this.state.message.buttonTitle !== \"\" && this.state.message.buttonLink !== \"\") {\r\n setCardBtn(this.card, this.state.message.buttonTitle, this.state.message.buttonLink);\r\n }\r\n\r\n let adaptiveCard = new AdaptiveCards.AdaptiveCard();\r\n adaptiveCard.parse(this.card);\r\n let renderedCard = adaptiveCard.render();\r\n document.getElementsByClassName('adaptiveCardContainer')[0].appendChild(renderedCard);\r\n let link = this.state.message.buttonLink;\r\n adaptiveCard.onExecuteAction = function (action) { window.open(link, '_blank'); }\r\n });\r\n });\r\n }\r\n }\r\n\r\n private getItem = async (id: number) => {\r\n try {\r\n const response = await getSentNotification(id);\r\n response.data.sendingDuration = formatDuration(response.data.sendingStartedDate, response.data.sentDate);\r\n response.data.sendingStartedDate = formatDate(response.data.sendingStartedDate);\r\n response.data.sentDate = formatDate(response.data.sentDate);\r\n response.data.succeeded = formatNumber(response.data.succeeded);\r\n response.data.failed = formatNumber(response.data.failed);\r\n response.data.unknown = response.data.unknown && formatNumber(response.data.unknown);\r\n this.setState({\r\n message: response.data\r\n });\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.state.loader) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n const downloadIcon: IconProps = { name: 'download', size: \"medium\" };\r\n if (this.state.page === \"ViewStatus\") {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{this.localize(\"TitleText\")}

\r\n {this.state.message.title}\r\n
\r\n
\r\n

{this.localize(\"SendingStarted\")}

\r\n {this.state.message.sendingStartedDate}\r\n
\r\n
\r\n

{this.localize(\"Completed\")}

\r\n {this.state.message.sentDate}\r\n
\r\n
\r\n

{this.localize(\"Duration\")}

\r\n {this.state.message.sendingDuration}\r\n
\r\n
\r\n

{this.localize(\"Results\")}

\r\n \r\n
\r\n \r\n
\r\n {this.state.message.unknown &&\r\n <>\r\n \r\n \r\n }\r\n
\r\n
\r\n {this.renderAudienceSelection()}\r\n
\r\n
\r\n {this.renderErrorMessage()}\r\n
\r\n
\r\n {this.renderWarningMessage()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n else if (this.state.page === \"SuccessPage\") {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{this.localize(\"ExportQueueTitle\")}

\r\n {this.localize(\"ExportQueueSuccessMessage1\")}\r\n
\r\n
\r\n {this.localize(\"ExportQueueSuccessMessage2\")}\r\n
\r\n {this.localize(\"ExportQueueSuccessMessage3\")}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{this.localize(\"ExportErrorTitle\")}

\r\n {this.localize(\"ExportErrorMessage\")}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n }\r\n\r\n private onClose = () => {\r\n microsoftTeams.tasks.submitTask();\r\n }\r\n\r\n private onExport = async () => {\r\n let spanner = document.getElementsByClassName(\"sendingLoader\");\r\n spanner[0].classList.remove(\"hiddenLoader\");\r\n let payload = {\r\n id: this.state.message.id,\r\n teamId: this.state.teamId\r\n };\r\n await exportNotification(payload).then(() => {\r\n this.setState({ page: \"SuccessPage\" });\r\n }).catch(() => {\r\n this.setState({ page: \"ErrorPage\" });\r\n });\r\n }\r\n\r\n private getItemList = (items: string[]) => {\r\n let resultedTeams: IListItem[] = [];\r\n if (items) {\r\n resultedTeams = items.map((element) => {\r\n const resultedTeam: IListItem = {\r\n header: element,\r\n media: \r\n }\r\n return resultedTeam;\r\n });\r\n }\r\n return resultedTeams;\r\n }\r\n private renderAudienceSelection = () => {\r\n if (this.state.message.teamNames && this.state.message.teamNames.length > 0) {\r\n return (\r\n
\r\n

{this.localize(\"SentToGeneralChannel\")}

\r\n \r\n
);\r\n } else if (this.state.message.rosterNames && this.state.message.rosterNames.length > 0) {\r\n return (\r\n
\r\n

{this.localize(\"SentToRosters\")}

\r\n \r\n
);\r\n } else if (this.state.message.groupNames && this.state.message.groupNames.length > 0) {\r\n return (\r\n
\r\n

{this.localize(\"SentToGroups1\")}

\r\n {this.localize(\"SentToGroups2\")}\r\n \r\n
);\r\n } else if (this.state.message.allUsers) {\r\n return (\r\n
\r\n

{this.localize(\"SendToAllUsers\")}

\r\n
);\r\n } else {\r\n return (
);\r\n }\r\n }\r\n private renderErrorMessage = () => {\r\n if (this.state.message.errorMessage) {\r\n return (\r\n
\r\n

{this.localize(\"Errors\")}

\r\n {this.state.message.errorMessage}\r\n
\r\n );\r\n } else {\r\n return (
);\r\n }\r\n }\r\n\r\n private renderWarningMessage = () => {\r\n if (this.state.message.warningMessage) {\r\n return (\r\n
\r\n

{this.localize(\"Warnings\")}

\r\n {this.state.message.warningMessage}\r\n
\r\n );\r\n } else {\r\n return (
);\r\n }\r\n }\r\n}\r\n\r\nconst StatusTaskModuleWithTranslation = withTranslation()(StatusTaskModule);\r\nexport default StatusTaskModuleWithTranslation;","import * as React from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport * as AdaptiveCards from \"adaptivecards\";\r\nimport { Loader, Button, Text, List, Image } from '@stardust-ui/react';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nimport './sendConfirmationTaskModule.scss';\r\nimport { getDraftNotification, getConsentSummaries, sendDraftNotification } from '../../apis/messageListApi';\r\nimport {\r\n getInitAdaptiveCard, setCardTitle, setCardImageLink, setCardSummary,\r\n setCardAuthor, setCardBtn\r\n} from '../AdaptiveCard/adaptiveCard';\r\nimport { ImageUtil } from '../../utility/imageutility';\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport interface IListItem {\r\n header: string,\r\n media: JSX.Element,\r\n}\r\n\r\nexport interface IMessage {\r\n id: string;\r\n title: string;\r\n acknowledgements?: number;\r\n reactions?: number;\r\n responses?: number;\r\n succeeded?: number;\r\n failed?: number;\r\n throttled?: number;\r\n sentDate?: string;\r\n imageLink?: string;\r\n summary?: string;\r\n author?: string;\r\n buttonLink?: string;\r\n buttonTitle?: string;\r\n}\r\n\r\nexport interface SendConfirmationTaskModuleProps extends RouteComponentProps, WithTranslation {\r\n}\r\n\r\nexport interface IStatusState {\r\n message: IMessage;\r\n loader: boolean;\r\n teamNames: string[];\r\n rosterNames: string[];\r\n groupNames: string[];\r\n allUsers: boolean;\r\n messageId: number;\r\n}\r\n\r\nclass SendConfirmationTaskModule extends React.Component {\r\n readonly localize: TFunction;\r\n private initMessage = {\r\n id: \"\",\r\n title: \"\"\r\n };\r\n\r\n private card: any;\r\n\r\n constructor(props: SendConfirmationTaskModuleProps) {\r\n super(props);\r\n this.localize = this.props.t;\r\n this.card = getInitAdaptiveCard(this.localize);\r\n\r\n this.state = {\r\n message: this.initMessage,\r\n loader: true,\r\n teamNames: [],\r\n rosterNames: [],\r\n groupNames: [],\r\n allUsers: false,\r\n messageId: 0,\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n\r\n let params = this.props.match.params;\r\n\r\n if ('id' in params) {\r\n let id = params['id'];\r\n this.getItem(id).then(() => {\r\n getConsentSummaries(id).then((response) => {\r\n this.setState({\r\n teamNames: response.data.teamNames.sort(),\r\n rosterNames: response.data.rosterNames.sort(),\r\n groupNames: response.data.groupNames.sort(),\r\n allUsers: response.data.allUsers,\r\n messageId: id,\r\n }, () => {\r\n this.setState({\r\n loader: false\r\n }, () => {\r\n setCardTitle(this.card, this.state.message.title);\r\n setCardImageLink(this.card, this.state.message.imageLink);\r\n setCardSummary(this.card, this.state.message.summary);\r\n setCardAuthor(this.card, this.state.message.author);\r\n if (this.state.message.buttonTitle && this.state.message.buttonLink) {\r\n setCardBtn(this.card, this.state.message.buttonTitle, this.state.message.buttonLink);\r\n }\r\n\r\n let adaptiveCard = new AdaptiveCards.AdaptiveCard();\r\n adaptiveCard.parse(this.card);\r\n let renderedCard = adaptiveCard.render();\r\n document.getElementsByClassName('adaptiveCardContainer')[0].appendChild(renderedCard);\r\n if (this.state.message.buttonLink) {\r\n let link = this.state.message.buttonLink;\r\n adaptiveCard.onExecuteAction = function (action) { window.open(link, '_blank'); };\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n private getItem = async (id: number) => {\r\n try {\r\n const response = await getDraftNotification(id);\r\n this.setState({\r\n message: response.data\r\n });\r\n } catch (error) {\r\n return error;\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.state.loader) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{this.localize(\"ConfirmToSend\")}

\r\n {this.localize(\"SendToRecipientsLabel\")}\r\n
\r\n\r\n
\r\n {this.renderAudienceSelection()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n private onSendMessage = () => {\r\n let spanner = document.getElementsByClassName(\"sendingLoader\");\r\n spanner[0].classList.remove(\"hiddenLoader\");\r\n sendDraftNotification(this.state.message).then(() => {\r\n microsoftTeams.tasks.submitTask();\r\n });\r\n }\r\n\r\n private getItemList = (items: string[]) => {\r\n let resultedTeams: IListItem[] = [];\r\n if (items) {\r\n resultedTeams = items.map((element) => {\r\n const resultedTeam: IListItem = {\r\n header: element,\r\n media: \r\n }\r\n return resultedTeam;\r\n });\r\n }\r\n return resultedTeams;\r\n }\r\n\r\n private renderAudienceSelection = () => {\r\n if (this.state.teamNames && this.state.teamNames.length > 0) {\r\n return (\r\n
{this.localize(\"TeamsLabel\")}\r\n \r\n
\r\n );\r\n } else if (this.state.rosterNames && this.state.rosterNames.length > 0) {\r\n return (\r\n
{this.localize(\"TeamsMembersLabel\")}\r\n \r\n
);\r\n } else if (this.state.groupNames && this.state.groupNames.length > 0) {\r\n return (\r\n
{this.localize(\"GroupsMembersLabel\")}\r\n \r\n
);\r\n } else if (this.state.allUsers) {\r\n return (\r\n
\r\n {this.localize(\"AllUsersLabel\")}\r\n
\r\n \r\n
\r\n
);\r\n } else {\r\n return (
);\r\n }\r\n }\r\n}\r\n\r\nconst sendConfirmationTaskModuleWithTranslation = withTranslation()(SendConfirmationTaskModule);\r\nexport default sendConfirmationTaskModuleWithTranslation;","import React from 'react';\r\nimport { RouteComponentProps } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Text } from '@stardust-ui/react';\r\nimport './errorPage.scss';\r\n\r\nconst ErrorPage: React.FunctionComponent = props => {\r\n const { t } = useTranslation();\r\n\r\n function parseErrorMessage(): string {\r\n const params = props.match.params;\r\n if ('id' in params) {\r\n const id = params['id'];\r\n if (id === \"401\") {\r\n return t(\"UnauthorizedErrorMessage\");\r\n } else if (id === \"403\") {\r\n return t(\"ForbiddenErrorMessage\");\r\n }\r\n }\r\n return t(\"GeneralErrorMessage\");\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ErrorPage;","import React from \"react\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Text, Button } from \"@stardust-ui/react\";\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport \"./signInPage.scss\";\r\nimport i18n from \"../../i18n\";\r\n\r\nconst SignInPage: React.FunctionComponent = props => {\r\n const { t } = useTranslation();\r\n const errorMessage = t(\"SignInPromptMessage\");\r\n\r\n function onSignIn() {\r\n microsoftTeams.authentication.authenticate({\r\n url: window.location.origin + \"/signin-simple-start\",\r\n successCallback: () => {\r\n console.log(\"Login succeeded!\");\r\n window.location.href = \"/messages\";\r\n },\r\n failureCallback: (reason) => {\r\n console.log(\"Login failed: \" + reason);\r\n window.location.href = `/errorpage?locale=${i18n.language}`;\r\n }\r\n });\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default SignInPage;\r\n","import React, { useEffect } from \"react\";\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { getAuthenticationConsentMetadata } from '../../apis/messageListApi';\r\n\r\nconst SignInSimpleStart: React.FunctionComponent = () => {\r\n useEffect(() => {\r\n microsoftTeams.initialize();\r\n\r\n microsoftTeams.getContext(context => {\r\n const windowLocationOriginDomain = window.location.origin.replace(\"https://\", \"\");\r\n const login_hint = context.upn ? context.upn : \"\";\r\n\r\n getAuthenticationConsentMetadata(windowLocationOriginDomain, login_hint).then(result => {\r\n window.location.assign(result.data);\r\n });\r\n });\r\n });\r\n\r\n return (\r\n <>\r\n );\r\n};\r\n\r\nexport default SignInSimpleStart;","import React, { useEffect } from \"react\";\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\n\r\nconst SignInSimpleEnd: React.FunctionComponent = () => {\r\n // Parse hash parameters into key-value pairs\r\n function getHashParameters() {\r\n const hashParams: any = {};\r\n window.location.hash.substr(1).split(\"&\").forEach(function (item) {\r\n let s = item.split(\"=\"),\r\n k = s[0],\r\n v = s[1] && decodeURIComponent(s[1]);\r\n hashParams[k] = v;\r\n });\r\n return hashParams;\r\n }\r\n\r\n useEffect(() => {\r\n microsoftTeams.initialize();\r\n\r\n const hashParams: any = getHashParameters();\r\n if (hashParams[\"error\"]) {\r\n // Authentication/authorization failed\r\n microsoftTeams.authentication.notifyFailure(hashParams[\"error\"]);\r\n } else if (hashParams[\"id_token\"]) {\r\n // Success\r\n microsoftTeams.authentication.notifySuccess();\r\n } else {\r\n // Unexpected condition: hash does not contain error or access_token parameter\r\n microsoftTeams.authentication.notifyFailure(\"UnexpectedFailure\");\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n );\r\n};\r\n\r\nexport default SignInSimpleEnd;","import React, { Suspense } from 'react';\r\nimport { BrowserRouter, Route, Switch } from 'react-router-dom';\r\nimport Configuration from './components/config';\r\nimport TabContainer from './components/TabContainer/tabContainer';\r\nimport NewMessage from './components/NewMessage/newMessage';\r\nimport StatusTaskModule from './components/StatusTaskModule/statusTaskModule';\r\nimport './App.scss';\r\nimport { Provider, themes } from '@stardust-ui/react';\r\nimport SendConfirmationTaskModule from './components/SendConfirmationTaskModule/sendConfirmationTaskModule';\r\nimport * as microsoftTeams from \"@microsoft/teams-js\";\r\nimport { TeamsThemeContext, getContext, ThemeStyle } from 'msteams-ui-components-react';\r\nimport ErrorPage from \"./components/ErrorPage/errorPage\";\r\nimport SignInPage from \"./components/SignInPage/signInPage\";\r\nimport SignInSimpleStart from \"./components/SignInPage/signInSimpleStart\";\r\nimport SignInSimpleEnd from \"./components/SignInPage/signInSimpleEnd\";\r\nimport { updateLocale } from './i18n';\r\n\r\nexport interface IAppState {\r\n theme: string;\r\n themeStyle: number;\r\n}\r\n\r\nclass App extends React.Component<{}, IAppState> {\r\n\r\n constructor(props: {}) {\r\n super(props);\r\n this.state = {\r\n theme: \"\",\r\n themeStyle: ThemeStyle.Light,\r\n }\r\n }\r\n\r\n public componentDidMount() {\r\n microsoftTeams.initialize();\r\n microsoftTeams.getContext((context) => {\r\n let theme = context.theme || \"\";\r\n this.updateTheme(theme);\r\n this.setState({\r\n theme: theme\r\n });\r\n });\r\n\r\n microsoftTeams.registerOnThemeChangeHandler((theme) => {\r\n this.updateTheme(theme);\r\n this.setState({\r\n theme: theme,\r\n }, () => {\r\n this.forceUpdate();\r\n });\r\n });\r\n\r\n updateLocale();\r\n }\r\n\r\n public setThemeComponent = () => {\r\n if (this.state.theme === \"dark\") {\r\n return (\r\n \r\n
\r\n {this.getAppDom()}\r\n
\r\n
\r\n );\r\n }\r\n else if (this.state.theme === \"contrast\") {\r\n return (\r\n \r\n
\r\n {this.getAppDom()}\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n \r\n
\r\n {this.getAppDom()}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n private updateTheme = (theme: string) => {\r\n if (theme === \"dark\") {\r\n this.setState({\r\n themeStyle: ThemeStyle.Dark\r\n });\r\n } else if (theme === \"contrast\") {\r\n this.setState({\r\n themeStyle: ThemeStyle.HighContrast\r\n });\r\n } else {\r\n this.setState({\r\n themeStyle: ThemeStyle.Light\r\n });\r\n }\r\n }\r\n\r\n public getAppDom = () => {\r\n const context = getContext({\r\n baseFontSize: 10,\r\n style: this.state.themeStyle\r\n });\r\n return (\r\n \r\n }>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
\r\n {this.setThemeComponent()}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { combineReducers } from \"redux\";\r\n\r\nexport const selectedMessageReducer = (selectedMessage = null, action: { type: string; payload: any; }) => {\r\n if (action.type === 'MESSAGE_SELECTED') {\r\n return action.payload;\r\n }\r\n return selectedMessage;\r\n}\r\n\r\nexport const messagesListReducer = (messages = [], action: { type: string; payload: any; }) => {\r\n if (action.type === 'FETCH_MESSAGES') {\r\n return action.payload\r\n }\r\n return messages;\r\n};\r\n\r\nexport const draftmessagesListReducer = (draftMessages = [], action: { type: string; payload: any; }) => {\r\n if (action.type === 'FETCH_DRAFTMESSAGES') {\r\n return action.payload\r\n }\r\n return draftMessages;\r\n};\r\n\r\nexport default combineReducers({\r\n messagesList: messagesListReducer,\r\n draftMessagesList: draftmessagesListReducer,\r\n selectedMessage: selectedMessageReducer,\r\n});","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.scss';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { Provider } from 'react-redux';\r\nimport { createStore, applyMiddleware } from 'redux';\r\nimport reducers from './reducers';\r\nimport thunk from 'redux-thunk';\r\n\r\nconst store = createStore(reducers, applyMiddleware(thunk));\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}