{"version":3,"file":"bookingapp.js","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/create fake namespace object","webpack:///webpack/runtime/jsonp chunk loading","webpack:///./authentication/AuthenticationService.ts","webpack:///./authentication/INestedAppAuthenticationService.ts","webpack:///./authentication/NestedAppAuthenticationService.ts","webpack:///./authentication/index.ts","webpack:///./infrastructures/implementations/DialogService.ts","webpack:///./infrastructures/implementations/OutlookAppointmentExtractor.ts","webpack:///./infrastructures/implementations/OutlookAppointmentManager.ts","webpack:///./infrastructures/implementations/PlatformService.ts","webpack:///./infrastructures/implementations/VrService.ts","webpack:///./infrastructures/implementations/index.ts","webpack:///./infrastructures/models/OutlookAppointment.ts","webpack:///./infrastructures/models/OutlookAppointmentLocker.ts","webpack:///./infrastructures/models/OutlookAppointmentStartedFlag.ts","webpack:///./infrastructures/models/OutlookAppointmentWatchingFlag.ts","webpack:///./infrastructures/models/OutlookRecipient.ts","webpack:///./infrastructures/models/PlatformHelper.ts","webpack:///./infrastructures/models/RecurringHelper.ts","webpack:///./infrastructures/models/index.ts","webpack:///./ioc/RegisterOfficeServices.ts","webpack:///./ioc/index.ts","webpack:///./repositories/OutlookOrganizerRepository.ts","webpack:///./repositories/OutlookSettingsRepository.ts","webpack:///./repositories/index.ts","webpack:///./types/permission.ts","webpack:///./src/booking-app/index.tsx","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/runtimeId","webpack:///webpack/runtime/nonce","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t609: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkoffice_addin_bookingapp_react\"] = self[\"webpackChunkoffice_addin_bookingapp_react\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import {\r\n IAuthenticationService,\r\n IOrganizationService,\r\n TokenIOrganizationService,\r\n baContainer,\r\n IConfiguration,\r\n} from \"booking-app-op\";\r\nimport axios, { AxiosResponse } from \"axios\";\r\n// import { processDialogEvent } from \"./office-apis-helpers\";\r\nimport {\r\n INestedAppAuthenticationService,\r\n TokenINestedAppAuthenticationService,\r\n} from \"./INestedAppAuthenticationService\";\r\nimport { PERMISSION } from \"../types/permission\";\r\n\r\ninterface DataModel {\r\n organizerEmail?: string;\r\n accessToken?: string;\r\n refreshToken?: string;\r\n urlRefreshToken?: string;\r\n expiredTime?: string;\r\n}\r\n\r\nexport class AuthenticationService implements IAuthenticationService {\r\n private _baseURL = window.RESOURCE_CENTRAL_ENDPOINT;\r\n private _baseAPI_URL = window.API_ENDPOINT;\r\n\r\n private _nestedAppAuthenticationService: INestedAppAuthenticationService;\r\n private _token: string | undefined = undefined;\r\n\r\n constructor() {\r\n this._nestedAppAuthenticationService = baContainer.resolve(TokenINestedAppAuthenticationService);\r\n }\r\n async GetCallbackToken() {\r\n try {\r\n const accessToken = await this._nestedAppAuthenticationService.ssoGetToken(PERMISSION);\r\n return accessToken;\r\n } catch (error) {\r\n return \"\";\r\n }\r\n }\r\n\r\n async GetTokenFromAAD(): Promise {\r\n let userTokenEncoded = await Office.auth.getAccessToken({ allowSignInPrompt: true, allowConsentPrompt: true });\r\n return userTokenEncoded;\r\n }\r\n\r\n async GetAccessTokenFromAAD(_configuration: IConfiguration): Promise {\r\n // let organizer = Office.context.mailbox.userProfile;\r\n try {\r\n const getToken = await this.GetCallbackToken();\r\n if (getToken) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n // let userTokenEncoded = await Office.auth.getAccessToken({ allowSignInPrompt: true, allowConsentPrompt: true });\r\n\r\n // if (userTokenEncoded) {\r\n // //send this token to back-end\r\n // const url = this._baseAPI_URL + \"/config-authen/aquire-token\";\r\n // const headers = {\r\n // accept: \"text/plain\",\r\n // \"Content-Type\": \"application/json-patch+json\",\r\n // };\r\n\r\n // const payload = JSON.stringify(userTokenEncoded);\r\n // const response = await axios.post(url, payload, { headers }).then((response) => {\r\n // return response.data;\r\n // });\r\n // //Lưu token sang RC\r\n // // await this.saveTokenToRC(\r\n // // organizer.emailAddress,\r\n // // response?.AccessToken,\r\n // // response?.IdToken,\r\n // // response?.ExpiresOn,\r\n // // configuration\r\n // // );\r\n\r\n // Office.context.mailbox.item?.sessionData.setAsync(\"token\", response?.AccessToken, function (asyncResult: any) {\r\n // if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {\r\n // console.log(\"sessionData.setAsync succeeded\");\r\n // } else {\r\n // console.log(\"Failed to set sessionData. Error: \" + JSON.stringify(asyncResult.error));\r\n // }\r\n // });\r\n\r\n // // let data = {\r\n // // token: userTokenEncoded,\r\n // // organizerName: organizer.displayName,\r\n // // organizerEmail: organizer.emailAddress,\r\n // // };\r\n // // if (userTokenEncoded && organizer) {\r\n // // let request = JSON.stringify(data);\r\n // // const config = {\r\n // // method: \"post\",\r\n // // url: this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\",\r\n // // headers: {\r\n // // \"Content-Type\": \"application/json\",\r\n // // },\r\n // // data: request,\r\n // // };\r\n\r\n // // await axios.post(this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\", request, config);\r\n // // }\r\n // return true;\r\n // } else {\r\n // return false;\r\n // // alert(\"userTokenEncoded error\");\r\n // // throw new Error(\"userTokenEncoded error\");\r\n // }\r\n } catch (exception: any) {\r\n //console.log([\"EXCEPTION 1: \" + JSON.stringify(exception)]);\r\n // const storedObjStr = sessionStorage.getItem(\"AADToken\") || \"\";\r\n // const storedObj = storedObjStr ? JSON.parse(storedObjStr) : null;\r\n\r\n // if (storedObj) {\r\n // sessionStorage.removeItem(\"AADToken\");\r\n // //Save token to RC\r\n // // await this.saveTokenToRC(\r\n // // organizer.emailAddress,\r\n // // storedObj?.accessToken,\r\n // // storedObj?.idToken,\r\n // // storedObj?.expiresOn,\r\n // // configuration\r\n // // );\r\n\r\n // // let _data = {\r\n // // token: storedObj?.accessToken,\r\n // // organizerName: organizer.displayName,\r\n // // organizerEmail: organizer.emailAddress,\r\n // // };\r\n // // let request = JSON.stringify(_data);\r\n // // let config = {\r\n // // method: \"post\",\r\n // // url: this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\",\r\n // // headers: {\r\n // // \"Content-Type\": \"application/json\",\r\n // // },\r\n // // data: request,\r\n // // };\r\n\r\n // // await axios.post(this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\", request, config);\r\n\r\n // return true;\r\n // }\r\n\r\n // // The only exceptions caught here are exceptions in your code in the try block\r\n // // and errors returned from the call of `getAccessToken` above.\r\n // if (exception.code && (storedObj === null || storedObj === undefined)) {\r\n // try {\r\n // const result = await this.getTokenSSO(organizer, configuration);\r\n // return result;\r\n // } catch (err: any) {\r\n // let intervalId = setInterval(function () {\r\n // let divElement = document.getElementById(\"msg-error-addin\");\r\n // if (divElement) {\r\n // clearInterval(intervalId); // Dừng vòng lặp khi divElement tồn tại\r\n // divElement.textContent = processDialogEvent(err);\r\n // }\r\n // }, 1000); // Kiểm tra mỗi giây (có thể thay đổi thời gian kiểm tra tùy ý)\r\n\r\n // // window.location.reload();\r\n // // alert(\"Error: User closed the dialog instead of waiting for it to close\" + err?.error);\r\n // }\r\n // } else {\r\n // console.log([\"EXCEPTION 2: \" + JSON.stringify(exception)]);\r\n // }\r\n\r\n return false;\r\n }\r\n // return true;\r\n }\r\n\r\n async getTokenSSO(organizer: Office.UserProfile, _configuration: any): Promise {\r\n const userAccount = await this._nestedAppAuthenticationService.ssoGetUserIdentity(PERMISSION);\r\n\r\n if (userAccount) {\r\n const object = {\r\n accessToken: userAccount.accessToken,\r\n idToken: userAccount.idToken,\r\n expiresOn: userAccount.expiresOn,\r\n };\r\n //Save token to sessionStorage\r\n sessionStorage.setItem(\"AADToken\", JSON.stringify(object));\r\n\r\n // let expiresOn = userAccount.expiresOn; // Assign a Date value or null to the variable\r\n\r\n // let expiresOnString = expiresOn !== null ? expiresOn.toString() : \"\";\r\n\r\n //Save token to RC\r\n // await this.saveTokenToRC(\r\n // organizer.emailAddress,\r\n // userAccount.accessToken,\r\n // userAccount.idToken,\r\n // expiresOnString,\r\n // configuration\r\n // );\r\n\r\n // let data = {\r\n // token: userAccount.accessToken,\r\n // organizerName: organizer.displayName,\r\n // organizerEmail: organizer.emailAddress,\r\n // };\r\n if (organizer) {\r\n // let request = JSON.stringify(data);\r\n // let config = {\r\n // method: \"post\",\r\n // url: this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\",\r\n // headers: {\r\n // \"Content-Type\": \"application/json\",\r\n // },\r\n // data: request,\r\n // };\r\n\r\n // await axios.post(this._baseURL + \"/Admin/OfficeAddInAuth/Authorize\", request, config);\r\n\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n handleClientSideErrors(code: number): void {\r\n switch (code) {\r\n case 13001:\r\n // No one is signed into Office. If the add-in cannot be effectively used when no one\r\n // is logged into Office, then the first call of getAccessToken should pass the\r\n // `allowSignInPrompt: true` option.\r\n //console.log([\"No one is signed into Office.\"]);\r\n break;\r\n case 13002:\r\n // The user aborted the consent prompt. If the add-in cannot be effectively used when consent\r\n // has not been granted, then the first call of getAccessToken should pass the `allowConsentPrompt: true` option.\r\n //console.log([\"You can use many of the add-ins functions even though you have not granted consent. If you want to grant consent, press the Get OneDrive File Names button again.\"]);\r\n break;\r\n case 13006:\r\n // Only seen in Office on the web.\r\n //console.log([\"Office on the web is experiencing a problem. Please sign out of Office, close the browser, and then start again.\"]);\r\n break;\r\n case 13008:\r\n // Only seen in Office on the web.\r\n //console.log([\"Office is still working on the last operation. When it completes, try this operation again.\"]);\r\n break;\r\n case 13010:\r\n // Only seen in Office on the web.\r\n //console.log([\"Follow the instructions to change your browser's zone configuration.\"]);\r\n break;\r\n default:\r\n //console.log(\"Dialog fallback will show...\");\r\n // For all other errors, including 13000, 13003, 13005, 13007, 13012, and 50001, fall back\r\n // to non-SSO sign-in.\r\n // this.dialogFallback();\r\n break;\r\n }\r\n }\r\n\r\n dialogFallback(): void {\r\n let organizer = Office.context.mailbox.userProfile;\r\n // let url =\r\n // this._baseURL +\r\n // \"/Admin/OfficeAddInAuth/Login?host=\" +\r\n // location.hostname +\r\n // \"&port=\" +\r\n // location.port +\r\n // \"&protocol=\" +\r\n // location.protocol +\r\n // \"&organizerName=\" +\r\n // organizer.displayName +\r\n // \"&organizerEmail=\" +\r\n // organizer.emailAddress;\r\n\r\n // let fullUrl = location.protocol + \"//\" + location.hostname + (location.port ? \":\" + location.port : \"\") + url;\r\n\r\n // height and width are percentages of the size of the parent Office application, e.g., PowerPoint, Excel, Word, etc.\r\n let url =\r\n \"/ResourceCentral/Admin/OfficeAddInAuth/Login?host=\" +\r\n location.hostname +\r\n \"&port=\" +\r\n location.port +\r\n \"&protocol=\" +\r\n location.protocol +\r\n \"&organizerName=\" +\r\n organizer.displayName +\r\n \"&organizerEmail=\" +\r\n organizer.emailAddress;\r\n let fullUrl = location.protocol + \"//\" + location.hostname + (location.port ? \":\" + location.port : \"\") + url;\r\n Office.context.ui.displayDialogAsync(fullUrl, { height: 60, width: 30 }, this._processMessage);\r\n }\r\n\r\n private _processMessage(asyncResult: Office.AsyncResult) {\r\n let dialog: Office.Dialog = asyncResult.value;\r\n //console.log(\"Dialog has initialized. Wiring up events\");\r\n if (dialog != null) {\r\n dialog.addEventHandler(Office.EventType.DialogEventReceived, (args: any) => {\r\n if (args.error) {\r\n //console.log(\"Error received in processMessage: \" + args.error);\r\n }\r\n });\r\n dialog.addEventHandler(Office.EventType.DialogMessageReceived, (args: any) => {\r\n if (args.message) {\r\n //console.log(\"Message received in processMessage: \");\r\n let message = JSON.parse(args.message);\r\n\r\n if (message.status === \"success\") {\r\n sessionStorage.setItem(\"AADToken\", message.accessToken);\r\n dialog.close();\r\n window.location.reload();\r\n } else {\r\n // Something went wrong with authentication or the authorization of the web application.\r\n //dialog.close();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n async GetUserIdentityToken(): Promise {\r\n if(!this._token) {\r\n try {\r\n const accessToken = await this._nestedAppAuthenticationService.ssoGetToken(PERMISSION);\r\n if (accessToken) {\r\n sessionStorage.setItem(\"token\", accessToken);\r\n this._token = accessToken;\r\n }\r\n } catch (error) {\r\n console.log(\"🚀 ~ AuthenticationService ~ GetUserIdentityToken ~ error:\", error);\r\n this._token = \"\";\r\n }\r\n }\r\n return this._token;\r\n\r\n // return new Promise((resolve: any) => {\r\n // Office.context.mailbox.getUserIdentityTokenAsync(function (res) {\r\n // if (res.status === Office.AsyncResultStatus.Succeeded) {\r\n // resolve(res.value);\r\n // sessionStorage.setItem(\"token\", res.value);\r\n // }\r\n // });\r\n // });\r\n }\r\n\r\n //Hàm kết hợp lấy config auth và gửi token sang RC\r\n async saveTokenToRC(\r\n _organizerEmail: string,\r\n accessToken: string,\r\n idToken: string,\r\n expiresOn: string,\r\n configuration: any\r\n ): Promise {\r\n //Send token to RC\r\n\r\n const _olOrganizerService: IOrganizationService = baContainer.resolve(TokenIOrganizationService);\r\n const organizer = await _olOrganizerService.GetCurrentOrganizer();\r\n\r\n const payloadToRc: DataModel = {\r\n organizerEmail: organizer?.Email || \"\",\r\n accessToken: accessToken,\r\n refreshToken: idToken,\r\n expiredTime: expiresOn,\r\n urlRefreshToken: `https://login.microsoftonline.com/${configuration?.tenantId}/oauth2/v2.0/token`,\r\n };\r\n await this.updateOrganizerPreferences(payloadToRc);\r\n }\r\n\r\n async updateOrganizerPreferences(payload: DataModel): Promise {\r\n // const url = \"https://ba2.eastasia.cloudapp.azure.com/ResourceCentralOrderService/api/v1/OfficeApp/updateOrganizerPreferences\";\r\n const url = this._baseAPI_URL + \"/gateway/order-api/v1/OfficeApp/updateOrganizerPreferences\";\r\n // console.log(\"updateOrganizerPreferences\" , payload);\r\n const headers = {\r\n accept: \"text/plain\",\r\n \"Content-Type\": \"application/json-patch+json\",\r\n };\r\n\r\n await axios\r\n .post(url, payload, { headers })\r\n .then((_response) => {\r\n console.log(_response.data);\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n async fetchConfigAuth() {\r\n const response: AxiosResponse = await axios.get(`${window.API_ENDPOINT}/config-authen/get-config-auth`);\r\n return response?.data;\r\n }\r\n}\r\n","import { AuthenticationResult } from \"@azure/msal-browser/dist/response/AuthenticationResult\";\r\n\r\nexport const TokenINestedAppAuthenticationService= \"INestedAppAuthenticationService\";\r\n \r\nexport interface INestedAppAuthenticationService {\r\n initialize(loginHint: string, clientId: string, tenantId: string, callBackUrl :string) : Promise;\r\n ssoGetToken(scopes: string[]): Promise;\r\n ssoGetUserIdentity(scopes: string[]): Promise \r\n}\r\n","\r\nimport { PublicClientNext, type IPublicClientApplication } from \"@azure/msal-browser\";\r\nimport { INestedAppAuthenticationService } from \"./INestedAppAuthenticationService\";\r\n\r\nexport class NestedAppAuthenticationService implements INestedAppAuthenticationService {\r\n private loginHint: string = \"\";\r\n private pca: IPublicClientApplication | undefined = undefined;\r\n\r\n async initialize(loginHint: string, clientId: string, _tenantId: string, callBackUrl :string) {\r\n const msalConfig = {\r\n auth: {\r\n clientId: clientId,\r\n // authority: `https://login.microsoftonline.com/${tenantId}`, //181be701-8740-4fbd-b90f-fed56225b7c8,\r\n authority: `https://login.microsoftonline.com/organizations`, //181be701-8740-4fbd-b90f-fed56225b7c8,\r\n supportsNestedAppAuth: true,\r\n redirectUri: callBackUrl, // Must be registered as \"spa\" type\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\", // Needed to avoid \"User login is required\" error.\r\n storeAuthStateInCookie: true, // Recommended to avoid certain IE/Edge issues.\r\n },\r\n };\r\n\r\n this.loginHint = loginHint;\r\n this.pca = await PublicClientNext.createPublicClientApplication(msalConfig);\r\n }\r\n\r\n async ssoGetToken(scopes: string[]) {\r\n const userAccount = await this.ssoGetUserIdentity(scopes);\r\n return userAccount.accessToken;\r\n }\r\n\r\n async ssoGetUserIdentity(scopes: string[]) {\r\n if (this.pca === undefined) {\r\n throw new Error(\"😖 AccountManager is not initialized!\");\r\n }\r\n\r\n // Specify minimum scopes needed for the access token.\r\n const tokenRequest = {\r\n scopes: scopes,\r\n loginHint: this.loginHint,\r\n };\r\n\r\n try {\r\n console.log(\"▶️ Trying to acquire token silently...\");\r\n\r\n //acquireTokenSilent requires an active account. Check if one exists, otherwise use ssoSilent.\r\n const account = this.pca.getActiveAccount();\r\n const userAccount = account ? await this.pca.acquireTokenSilent(tokenRequest) : await this.pca.ssoSilent(tokenRequest);\r\n\r\n console.log(\"✅ Acquired token silently. \");\r\n return userAccount;\r\n } catch (error) {\r\n console.log(`❌ Unable to acquire token silently: ${error}`);\r\n }\r\n\r\n // Acquire token silent failure. Send an interactive request via popup.\r\n try {\r\n console.log(\"▶️ Trying to acquire token interactively...\");\r\n const userAccount = await this.pca.acquireTokenPopup(tokenRequest);\r\n console.log(\"☑️ Acquired token interactively.\");\r\n return userAccount;\r\n } catch (popupError) {\r\n // Acquire token interactive failure.\r\n console.log(`❌ Unable to acquire token interactively: ${popupError}`);\r\n throw new Error(`Unable to acquire access token: ${popupError}`);\r\n }\r\n }\r\n}\r\n","export * from \"./AuthenticationService\"","// Importing necessary types and interfaces from \"booking-app-op\" module\r\nimport { DialogOptionsDto, IDialogModel, IDialogService, DialogEventType } from \"booking-app-op\";\r\n\r\n// Implementation of IDialogService interface\r\nexport class DialogService implements IDialogService {\r\n // Method to display a dialog box\r\n\r\n /**\r\n * Displays a dialog box with the specified URL and options.\r\n * @param url The URL of the page to display in the dialog box.\r\n * @param options The options for the dialog box.\r\n * @param callback A callback function to be called when the dialog box is displayed.\r\n */\r\n ShowDialog(url: string, options?: DialogOptionsDto, callback?: (dialog: IDialogModel) => void): void {\r\n // Setting up dialog options\r\n let dialogOptions: Office.DialogOptions = {\r\n displayInIframe: true,\r\n width: options?.Width,\r\n height: options?.Height,\r\n };\r\n\r\n // Callback function to handle the result of displayDialogAsync method\r\n const officeCallback = (asyncResult: Office.AsyncResult) => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {\r\n // If the dialog box is successfully displayed, create a dialog model object\r\n const dialogObject = asyncResult.value;\r\n const dialogModel: IDialogModel = {\r\n // Method to add an event handler to the dialog box\r\n addEventHandler: (\r\n eventType: DialogEventType,\r\n handler: (args: { message: string; origin: string | undefined } | { error: number }) => void\r\n ) => {\r\n const officeEventType =\r\n eventType === DialogEventType.DialogEventReceived\r\n ? Office.EventType.DialogEventReceived\r\n : Office.EventType.DialogMessageReceived;\r\n dialogObject.addEventHandler(officeEventType, handler);\r\n },\r\n // Method to close the dialog box\r\n close: () => {\r\n dialogObject.close();\r\n },\r\n // Method to send a message to the child window of the dialog box\r\n messageChild: (message: string, messageOptions?: { targetOrigin: string }) => {\r\n if (!messageOptions) {\r\n dialogObject.messageChild(message);\r\n } else dialogObject.messageChild(message, messageOptions);\r\n },\r\n };\r\n // Call the callback function with the dialog model object\r\n callback?.(dialogModel);\r\n } else {\r\n console.error(\"Failed to open dialog:\", asyncResult.error); // Log error\r\n }\r\n };\r\n // Display the dialog box using displayDialogAsync method\r\n Office.context.ui.displayDialogAsync(url, dialogOptions, officeCallback);\r\n }\r\n\r\n // Method to send a message to the parent window of the dialog box\r\n MessageParent(messageObject: string): void {\r\n Office.context.ui.messageParent(messageObject);\r\n }\r\n\r\n SaveSessionDataDialog(sessionData: string): void {\r\n const item = Office.context.mailbox.item;\r\n const asyncContext = sessionData || \"\";\r\n if (item) {\r\n item.loadCustomPropertiesAsync(this.customPropsCallback, asyncContext);\r\n item.sessionData.getAsync(\"TEMP\", (asyncResult) => {\r\n this.sessionCallback(asyncResult, sessionData);\r\n });\r\n }\r\n }\r\n\r\n private sessionCallback = (asyncResult: Office.AsyncResult, sessionData: string): void => {\r\n let currentValue = asyncResult.value || \"\";\r\n\r\n // Checking and concatenating values\r\n if (currentValue.indexOf(\",\") > -1) {\r\n const existingValues = new Set(currentValue.split(\",\"));\r\n const newValues = sessionData.split(\",\");\r\n newValues.forEach((value) => existingValues.add(value)); // Avoid duplicates\r\n currentValue = Array.from(existingValues).join(\",\");\r\n } else if (currentValue && sessionData) {\r\n currentValue += \",\" + sessionData;\r\n } else {\r\n currentValue = sessionData;\r\n }\r\n\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n item.sessionData.setAsync(\"TEMP\", currentValue);\r\n }\r\n };\r\n\r\n customPropsCallback = (asyncResult: Office.AsyncResult): void => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n // Handle error\r\n return;\r\n }\r\n\r\n const customProps = asyncResult.value;\r\n let rcTempId = customProps.get(\"rcTempId\") || \"\";\r\n const newValue = asyncResult.asyncContext as string;\r\n // Checking and concatenating values\r\n if (rcTempId.indexOf(\",\") > -1) {\r\n const existingValues = new Set(rcTempId.split(\",\"));\r\n const newValues = newValue.split(\",\");\r\n newValues.forEach((value) => existingValues.add(value)); // Avoid duplicates\r\n rcTempId = Array.from(existingValues).join(\",\");\r\n } else if (rcTempId && newValue) {\r\n rcTempId += \",\" + newValue;\r\n } else {\r\n rcTempId = newValue;\r\n }\r\n\r\n customProps.set(\"rcTempId\", rcTempId);\r\n customProps.saveAsync(this.saveCallback);\r\n };\r\n\r\n saveCallback = (asyncResult: Office.AsyncResult): void => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n console.error(asyncResult.error.message);\r\n } else {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n console.log(\r\n item.loadCustomPropertiesAsync((a) => {\r\n console.log(a.value.getAll());\r\n })\r\n );\r\n }\r\n // Proceed with the appropriate action for your add-in.\r\n }\r\n };\r\n}\r\n","import { IOutlookAppointmentExtractor, IOutlookOrganizerRepository, OutlookRecipientDto, TokenIOutlookOrganizerRepository } from \"booking-app-op\";\r\nimport { AppointmentModel, OutlookRecipient } from \"../models\";\r\nimport { container } from \"tsyringe\";\r\n\r\nexport class OutlookAppointmentExtractor implements IOutlookAppointmentExtractor {\r\n private _apptItem: Office.AppointmentCompose;\r\n private _callback: (appInfo?: AppointmentModel) => void;\r\n private _olOrganizerRepository: IOutlookOrganizerRepository;\r\n constructor(apptItem: Office.AppointmentCompose, callback: (appInfo?: AppointmentModel) => void) {\r\n this._apptItem = apptItem;\r\n this._callback = callback;\r\n this._olOrganizerRepository = container.resolve(TokenIOutlookOrganizerRepository);\r\n }\r\n Extract(): void {\r\n if (this._apptItem) {\r\n let apptInfo: AppointmentModel = {\r\n StartTime: new Date(),\r\n EndTime: new Date(),\r\n Recipients: [],\r\n EnhancedLocations: []\r\n }\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: apptInfo\r\n }\r\n this._apptItem.requiredAttendees.getAsync(options, this._getRequiredRecipientCallback.bind(this));\r\n }\r\n }\r\n private _getRequiredRecipientCallback(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let requiredRecipients: Array = asyncResult.value;\r\n let requiredOlRecipients: OutlookRecipientDto[] = requiredRecipients ? requiredRecipients.map(rs => {\r\n let recipient: OutlookRecipientDto = {\r\n Email: rs.emailAddress,\r\n Name: rs.displayName\r\n };\r\n return recipient;\r\n }) : [];\r\n\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n requiredOlRecipients.forEach(r => {\r\n apptInfo.Recipients.push(new OutlookRecipient(r.Email, r.Name, r.RecipientType, r.ResourceType));\r\n });\r\n\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: apptInfo\r\n }\r\n this._apptItem.optionalAttendees.getAsync(options, this.getOptionalRecipientCallback.bind(this));\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n private getOptionalRecipientCallback(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let optionalRecipients: Array = asyncResult.value;\r\n let optionalOlRecipients: OutlookRecipientDto[] = optionalRecipients ? optionalRecipients.map(rs => {\r\n let recipient: OutlookRecipientDto = {\r\n Email: rs.emailAddress,\r\n Name: rs.displayName\r\n };\r\n return recipient;\r\n }) : [];\r\n\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n optionalOlRecipients.forEach(r => {\r\n apptInfo.Recipients.push(new OutlookRecipient(r.Email, r.Name, r.RecipientType, r.ResourceType));\r\n });\r\n\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: apptInfo\r\n }\r\n if (Office.context.requirements.isSetSupported('Mailbox', 1.8)) {\r\n this._apptItem.enhancedLocation.getAsync(options, this.getEnhancedLocationsCallback.bind(this));\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n private getEnhancedLocationsCallback(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let locations: Array = asyncResult.value;\r\n let olLocations: OutlookRecipientDto[] = locations ? locations.map(rs => {\r\n let recipient: OutlookRecipientDto = {\r\n Email: rs.emailAddress,\r\n Name: rs.displayName\r\n };\r\n return recipient;\r\n }) : [];\r\n\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n olLocations.forEach(r => {\r\n apptInfo.Recipients.push(new OutlookRecipient(r.Email, r.Name, r.RecipientType, r.ResourceType));\r\n apptInfo.EnhancedLocations.push(new OutlookRecipient(r.Email, r.Name, r.RecipientType, r.ResourceType));\r\n });\r\n\r\n this._callback(apptInfo);\r\n //let options: Office.AsyncContextOptions = {\r\n // asyncContext: apptInfo\r\n //}\r\n //this._apptItem.start.getAsync(options, this.getStartTimeCallback.bind(this));\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n private getStartTimeCallback(asyncResult: Office.AsyncResult) {\r\n try {\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n apptInfo.StartTime = asyncResult.value;\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: apptInfo\r\n }\r\n this._apptItem.end.getAsync(options, this.getEndTimeCallback.bind(this));\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n private getEndTimeCallback(asyncResult: Office.AsyncResult) {\r\n try {\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n apptInfo.EndTime = asyncResult.value;\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: apptInfo\r\n }\r\n this._apptItem.recurrence.getAsync(options, this.getRecurrenceCallback.bind(this));\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n private getRecurrenceCallback(asyncResult: Office.AsyncResult) {\r\n try {\r\n var apptInfo = asyncResult.asyncContext as AppointmentModel;\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value) {\r\n apptInfo.Recurrence = asyncResult.value;\r\n }\r\n apptInfo.Organizer = this._olOrganizerRepository.GetOrganizer();\r\n this._callback(apptInfo);\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._callback();\r\n } finally {\r\n\r\n }\r\n }\r\n}","import {\r\n CustomLibary,\r\n DateTimePeriodDto,\r\n ExchangeResourceTypeEnum,\r\n // IApplicationSettingsService,\r\n IAppointmentManager,\r\n IHash,\r\n IOutlookOrganizerRepository,\r\n IPlatformService,\r\n OutlookAppointmentBaseInfoDto,\r\n OutlookAppointmentDto,\r\n OutlookAppointmentRecurrenceDto,\r\n OutlookRecipientDto,\r\n RecurringChangeTypeEnum,\r\n // // TokenIApplicationSettingsService,\r\n TokenIOutlookOrganizerRepository,\r\n TokenIPlatformService,\r\n UidGenerator,\r\n WebAddinPlatforms,\r\n} from \"booking-app-op\";\r\nimport {\r\n OutlookAppointment,\r\n OutlookAppointmentLocker,\r\n OutlookAppointmentStartedFlag,\r\n OutlookAppointmentWatchingFlag,\r\n OutlookRecipient,\r\n} from \"../models\";\r\n// import { RecurringHelper } from \"../models/RecurringHelper\";\r\nimport { container } from \"tsyringe\";\r\nimport { RecurringHelper } from \"../models/RecurringHelper\";\r\nimport { AuthenticationService } from \"../../authentication\";\r\nimport axios from \"axios\";\r\n\r\nexport class OutlookAppointmentManager implements IAppointmentManager {\r\n private readonly _appointment: OutlookAppointment;\r\n // private _apptSettingService: IApplicationSettingsService;\r\n private _platformService: IPlatformService;\r\n private _running: boolean;\r\n private _startedFlag: OutlookAppointmentStartedFlag;\r\n private _watchingFlag: OutlookAppointmentWatchingFlag;\r\n private _locker: OutlookAppointmentLocker;\r\n private _lastAttendeeSynctime: number;\r\n\r\n OnChanged: CustomLibary.Event;\r\n OnStarted: CustomLibary.Event;\r\n OnDateTimeChanged: CustomLibary.Event;\r\n OnRecipientsChanged: CustomLibary.Event;\r\n OnRecurrenceChanged: CustomLibary.Event;\r\n Organizer: OutlookRecipientDto | undefined;\r\n _olOrganizerRepository: IOutlookOrganizerRepository;\r\n\r\n private readonly _customUidKey = \"CUSTOM_UID\";\r\n private readonly _uidKey = \"UID\";\r\n private readonly _rcExtendedResourcesKey = \"RC_ExtendedResources\";\r\n private readonly _rcExtendedResourcesTimeStampKey = \"RC_ExtendedResources_TimeStamp\";\r\n\r\n public currentResources?: OutlookRecipientDto[];\r\n\r\n constructor() {\r\n this._olOrganizerRepository = container.resolve(TokenIOutlookOrganizerRepository);\r\n this._platformService = container.resolve(TokenIPlatformService);\r\n this._startedFlag = new OutlookAppointmentStartedFlag();\r\n this._watchingFlag = new OutlookAppointmentWatchingFlag();\r\n this._running = false;\r\n this.OnChanged = new CustomLibary.Event();\r\n this.OnStarted = new CustomLibary.Event();\r\n this.OnDateTimeChanged = new CustomLibary.Event();\r\n this.OnRecipientsChanged = new CustomLibary.Event>();\r\n this.OnRecurrenceChanged = new CustomLibary.Event();\r\n this._locker = new OutlookAppointmentLocker();\r\n this._appointment = new OutlookAppointment();\r\n this._getItemId();\r\n // this._apptSettingService = container.resolve(TokenIApplicationSettingsService);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n GetMessageUrl(): string {\r\n let resVersion = Office.MailboxEnums.RestVersion.v2_0;\r\n if (this._appointment.ItemId) {\r\n let strRestid = Office.context.mailbox.convertToRestId(this._appointment.ItemId, resVersion);\r\n let getMessageUrl = \"https://graph.microsoft.com/v1.0/me/events/\" + strRestid + \"?$select=iCalUId,originalStart\";\r\n return getMessageUrl;\r\n }\r\n return \"\";\r\n }\r\n\r\n GetMessageUrlCallback(): Promise {\r\n let resVersion = Office.MailboxEnums.RestVersion.v2_0;\r\n return new Promise((resolve, reject) => {\r\n let item = Office?.context?.mailbox?.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose && Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n if (appCompose.seriesId && this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac) {\r\n let strRestid = Office.context.mailbox.convertToRestId(appCompose.seriesId, resVersion);\r\n let getMessageUrl =\r\n \"https://graph.microsoft.com/v1.0/me/calendar/events/\" + strRestid + \"?$select=iCalUId,originalStart\";\r\n resolve(getMessageUrl);\r\n } else {\r\n console.log(\"result\", \"vo ne\");\r\n appCompose.getItemIdAsync((result) => {\r\n if (result?.value) {\r\n let strRestid = Office.context.mailbox.convertToRestId(result.value, resVersion);\r\n let getMessageUrl =\r\n \"https://graph.microsoft.com/v1.0/me/calendar/events/\" + strRestid + \"?$select=iCalUId,originalStart\";\r\n resolve(getMessageUrl);\r\n } else {\r\n reject(\"\");\r\n }\r\n });\r\n }\r\n } else {\r\n reject(\"\");\r\n }\r\n } else {\r\n reject(\"\");\r\n }\r\n });\r\n }\r\n\r\n GetAppointment(): OutlookAppointmentDto {\r\n return this._appointment.Export();\r\n }\r\n\r\n public async GetOrganizer(): Promise {\r\n const organizer = this._olOrganizerRepository.GetOrganizer();\r\n const realOrganizer = await this._olOrganizerRepository.GetRealOrganizerOfAppointment();\r\n this.Organizer = {\r\n Name: realOrganizer?.Name ?? organizer?.DisplayName ?? \"\",\r\n Email: realOrganizer?.Email ?? organizer?.Email ?? \"\",\r\n };\r\n }\r\n\r\n private _getItemId(): void {\r\n let item = Office?.context?.mailbox?.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose && Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n if (appCompose.seriesId && this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac) {\r\n this._appointment.ItemId = appCompose.seriesId;\r\n } else {\r\n appCompose.getItemIdAsync((result) => {\r\n if (result.value) {\r\n this._appointment.ItemId = result.value;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n Start() {\r\n if (!this._running) {\r\n if (!Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n this._extendAppointment();\r\n }\r\n this._appointmentWatcher();\r\n }\r\n }\r\n UpdateResources(_resources: Array): void {\r\n //let isResourcesUpdated = this._appointment.UpdateResources(resources);\r\n //if (isResourcesUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n // }\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n }\r\n AddResources(resources: OutlookRecipientDto[], locations: string[]): boolean {\r\n let result = false;\r\n this._lastAttendeeSynctime = Date.now();\r\n const isPlatformMac = this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac;\r\n try {\r\n if (isPlatformMac) {\r\n setTimeout(() => {\r\n this._addResources(resources);\r\n }, 3000);\r\n } else {\r\n this._addResources(resources);\r\n }\r\n if (!Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\") || isPlatformMac) {\r\n this._setLocations(locations);\r\n }\r\n\r\n result = true;\r\n } catch (ex) {\r\n //console.log(ex);\r\n result = false;\r\n }\r\n this._lastAttendeeSynctime = Date.now();\r\n return result;\r\n }\r\n private _addResources(resources: OutlookRecipientDto[]) {\r\n let platform = this._platformService.GetCurrentPlatform();\r\n // use add async instead of set async to improve performance.\r\n if (!Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n let addedResources = this._appointment.AddRequiredAttendee(resources);\r\n this._addRequiredAttendeesToOutlook(addedResources);\r\n } else {\r\n let addedResources = this._appointment.AddRecipients(resources);\r\n this._addResourcesToOutlook(addedResources);\r\n }\r\n }\r\n\r\n RemoveResources(resourceEmails: string[], locations: string[]): boolean {\r\n let result = false;\r\n this._lastAttendeeSynctime = Date.now();\r\n try {\r\n this._removeResources(resourceEmails);\r\n this.DeleteLocations(locations);\r\n if (\r\n this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac ||\r\n !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")\r\n ) {\r\n this._setLocations(locations);\r\n }\r\n result = true;\r\n } catch (ex) {\r\n //console.log(ex);\r\n result = false;\r\n }\r\n this._lastAttendeeSynctime = Date.now();\r\n return result;\r\n }\r\n UpdateRecipients(recipients: OutlookRecipientDto[]): boolean {\r\n let result = false;\r\n this._lastAttendeeSynctime = Date.now();\r\n try {\r\n let isUpdated = this._appointment.UpdateRecipients(recipients);\r\n this._updateAttendeesToOutlook(this._appointment.RequiredRecipients, this._appointment.OptionalRecipients);\r\n if (isUpdated) {\r\n let resourceDtos = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(resourceDtos);\r\n }\r\n result = true;\r\n } catch (ex) {\r\n //console.log(ex);\r\n result = false;\r\n }\r\n this._lastAttendeeSynctime = Date.now();\r\n return result;\r\n }\r\n UpdateAppointmentBaseInfo(apptDto: OutlookAppointmentBaseInfoDto): boolean {\r\n let result = false;\r\n try {\r\n this._appointment.Guid = apptDto.Guid;\r\n this._appointment.GlobalId = apptDto.GlobalId;\r\n this._appointment.CustomUid = apptDto.CustomUid ?? \"\";\r\n this._appointment.Uid = apptDto.Uid;\r\n this._appointment.OriginalStart = apptDto.OriginalStart;\r\n this._appointment.OriginalEnd = apptDto.OriginalEnd;\r\n this._appointment.HaveOrder = apptDto.HaveOrder;\r\n this._appointment.HaveNormalOrder = apptDto.HaveNormalOrder;\r\n this._appointment.IsReOpenAfterSent = apptDto.IsReopenAfterSent;\r\n\r\n // if (this._appointment.IsReOpenAfterSent) {\r\n // this.clearAllCustomProperties();\r\n // }\r\n\r\n if (\r\n apptDto.CustomUid &&\r\n apptDto.CustomUid !== \"\" &&\r\n !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")\r\n ) {\r\n let properties: IHash = {};\r\n properties[this._customUidKey] = this._appointment.CustomUid;\r\n this._setCustomProperty(properties);\r\n }\r\n\r\n if (this._appointment.IsReOpenAfterSent) {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n item.sessionData.setAsync(\"REOPEN_RC\", \"1\");\r\n }\r\n }\r\n\r\n result = true;\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return result;\r\n }\r\n\r\n public GetRecipients(): OutlookRecipientDto[] {\r\n let recipients = this._appointment.Recipients;\r\n let result: OutlookRecipientDto[] = [];\r\n if (recipients && recipients.length > 0) {\r\n result = this._appointment.ExportRecipients();\r\n }\r\n return result;\r\n }\r\n private _removeResources(resourceEmails: string[]) {\r\n this._appointment.RemoveRecipients(resourceEmails);\r\n this._updateRecipientsToOutlook(\r\n this._appointment.RequiredRecipients,\r\n this._appointment.OptionalRecipients,\r\n this._appointment.Resources,\r\n resourceEmails\r\n );\r\n }\r\n\r\n private _updateAttendeesToOutlook(requiredRecipients: OutlookRecipient[], optionalRecipients: OutlookRecipient[]) {\r\n let organizer = this._olOrganizerRepository.GetOrganizer();\r\n requiredRecipients = requiredRecipients.filter((rep) => rep.Email.toLowerCase() != organizer?.Email.toLowerCase());\r\n this._setRequiredAttendeesToOutlook(requiredRecipients);\r\n this._setOptionalAttendeesToOutlook(optionalRecipients);\r\n }\r\n\r\n private _updateRecipientsToOutlook(\r\n requiredRecipients: OutlookRecipient[],\r\n optionalRecipients: OutlookRecipient[],\r\n resources: OutlookRecipient[],\r\n resourceEmails: string[]\r\n ) {\r\n let requireRecipientsToRemove: OutlookRecipient[] = [];\r\n let organizer = this._olOrganizerRepository.GetOrganizer();\r\n if (requiredRecipients && requiredRecipients.length > 0) {\r\n requireRecipientsToRemove = requireRecipientsToRemove\r\n .concat(requiredRecipients)\r\n .filter((rep) => rep.Email.toLowerCase() != organizer?.Email.toLowerCase());\r\n }\r\n if (resources && resources.length > 0) {\r\n // the equipments will be set to required attendees field instead of enhanced location.\r\n let equipments = resources.filter((rs) => rs.ResourceType === ExchangeResourceTypeEnum.Equipment);\r\n if (equipments && equipments.length > 0) {\r\n requireRecipientsToRemove = requireRecipientsToRemove.concat(equipments);\r\n resources = resources.filter((rs) => rs.ResourceType != ExchangeResourceTypeEnum.Equipment);\r\n }\r\n }\r\n this._updateAttendeesToOutlook(requireRecipientsToRemove, optionalRecipients);\r\n let platform = this._platformService.GetCurrentPlatform();\r\n // use add async instead of set async to improve performance.\r\n if (platform === WebAddinPlatforms.OutlookForMac && !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n //console.log(\"Outlook for Mac with requirement set < 1.8 does not support set to resources/enhancedlocation field\");\r\n } else {\r\n //console.log(\"process set resources to outlook: \");\r\n //console.log(resources);\r\n let currentRecipients = resources;\r\n if (!Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n currentRecipients.push(...requireRecipientsToRemove);\r\n currentRecipients.push(...optionalRecipients);\r\n }\r\n this._setRcResourcesToOutlook(currentRecipients, resourceEmails);\r\n }\r\n }\r\n private _setRequiredAttendeesToOutlook(currentResources: Array) {\r\n try {\r\n var newRecipientsMap: IHash = {};\r\n let olRecipients: Array = [];\r\n currentResources.forEach((rs) => {\r\n let olRecipient: Office.EmailAddressDetails = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n appointmentResponse: Office.MailboxEnums.ResponseType.None,\r\n recipientType: Office.MailboxEnums.RecipientType.Other,\r\n };\r\n olRecipients.push(olRecipient);\r\n newRecipientsMap[olRecipient.emailAddress] = olRecipient;\r\n });\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: {},\r\n };\r\n appCompose.requiredAttendees.getAsync(\r\n option,\r\n (asyncResult: Office.AsyncResult) => {\r\n if (Office.AsyncResultStatus.Succeeded === asyncResult.status) {\r\n var recipientsToSet: Array = [];\r\n var oldRecipientsMap: IHash = {};\r\n if (asyncResult.value && asyncResult.value.length > 0) {\r\n asyncResult.value.forEach((oldRp) => {\r\n if (newRecipientsMap[oldRp.emailAddress]) {\r\n recipientsToSet.push(oldRp);\r\n oldRecipientsMap[oldRp.emailAddress] = oldRp;\r\n }\r\n });\r\n }\r\n if (olRecipients && olRecipients.length > 0) {\r\n olRecipients.forEach((newRp) => {\r\n if (!oldRecipientsMap[newRp.emailAddress]) {\r\n recipientsToSet.push(newRp);\r\n }\r\n });\r\n }\r\n this._lastAttendeeSynctime = Date.now();\r\n appCompose.requiredAttendees.setAsync(recipientsToSet, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n }\r\n private _addRequiredAttendeesToOutlook(newRecipients: Array) {\r\n try {\r\n if (newRecipients != null && newRecipients.length > 0) {\r\n let olRecipients = newRecipients.map((rs) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n };\r\n return olRecipient;\r\n });\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n this._lastAttendeeSynctime = Date.now();\r\n appCompose.requiredAttendees.addAsync(olRecipients, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n }\r\n private _addResourcesToOutlook(newResources: Array) {\r\n try {\r\n if (newResources != null && newResources.length > 0) {\r\n let olResources = newResources.map((rs) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n };\r\n return olRecipient;\r\n });\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n this._lastAttendeeSynctime = Date.now();\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n var newResourcesEquipment = newResources.filter((rs) => {\r\n return rs.ResourceType === ExchangeResourceTypeEnum.Equipment;\r\n });\r\n if (newResourcesEquipment != null && newResourcesEquipment.length > 0) {\r\n olResources = newResourcesEquipment.map((rs) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n };\r\n return olRecipient;\r\n });\r\n appCompose.requiredAttendees.addAsync(olResources, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n this.SetLocations2(olResources.map((item) => item.displayName));\r\n }\r\n\r\n var newResourcesRoom = newResources.filter((rs) => {\r\n return (\r\n rs.ResourceType === ExchangeResourceTypeEnum.Room ||\r\n rs.ResourceType == ExchangeResourceTypeEnum.Workspace\r\n );\r\n });\r\n\r\n if (newResourcesRoom != null && newResourcesRoom.length > 0) {\r\n let olResourcesLocation = newResourcesRoom.map((rs) => {\r\n let olRecipient: Office.LocationIdentifier = {\r\n id: rs.Email,\r\n type: Office.MailboxEnums.LocationType.Room,\r\n };\r\n return olRecipient;\r\n });\r\n appCompose.enhancedLocation.addAsync(\r\n olResourcesLocation,\r\n (_asyncResult: Office.AsyncResult) => {\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n );\r\n }\r\n } else {\r\n (appCompose as any).rcExtendedResources.addAsync(olResources, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n this._setCustomRcExtendedResources(olResources, true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n }\r\n private _setOptionalAttendeesToOutlook(currentResources: Array) {\r\n try {\r\n let emailSet = new Set();\r\n let olRecipients = new Array();\r\n\r\n currentResources.forEach((rs) => {\r\n if (!emailSet.has(rs.Email)) {\r\n emailSet.add(rs.Email);\r\n let olRecipient = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n };\r\n olRecipients.push(olRecipient);\r\n } else {\r\n console.log(\"Duplicate found: \", rs.Email);\r\n // Handle the duplicate as needed\r\n }\r\n });\r\n\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n //appCompose.getItemIdAsync\r\n if (appCompose) {\r\n this._lastAttendeeSynctime = Date.now();\r\n console.log(\"set optional \", olRecipients);\r\n appCompose.optionalAttendees.setAsync(olRecipients, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n }\r\n private _setRcResourcesToOutlook(currentResources: Array, resourceEmails: string[]) {\r\n try {\r\n let emailSet = new Set();\r\n let olRecipients = new Array();\r\n\r\n currentResources.forEach((rs) => {\r\n if (!emailSet.has(rs.Email)) {\r\n emailSet.add(rs.Email);\r\n let olRecipient = {\r\n displayName: rs.Name,\r\n emailAddress: rs.Email,\r\n };\r\n olRecipients.push(olRecipient);\r\n } else {\r\n console.log(\"Duplicate found: \", rs.Email);\r\n // Handle the duplicate as needed\r\n }\r\n });\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n this._lastAttendeeSynctime = Date.now();\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n let locationIdentifiers: Office.LocationIdentifier[] = resourceEmails.map(\r\n (r) =>\r\n ({\r\n id: r,\r\n type: Office.MailboxEnums.LocationType.Room,\r\n } as Office.LocationIdentifier)\r\n );\r\n appCompose.enhancedLocation.removeAsync(locationIdentifiers);\r\n } else {\r\n (appCompose as any).rcExtendedResources.setAsync(olRecipients, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n //appCompose.requiredAttendees.setAsync(olRecipients, () => {\r\n // this._lastAttendeeSynctime = Date.now();\r\n //});\r\n this._setCustomRcExtendedResources(olRecipients, false);\r\n }\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n console.log(ex);\r\n this._lastAttendeeSynctime = Date.now();\r\n }\r\n }\r\n public SetLocations(locations: string[]): boolean {\r\n return this._setLocations(locations);\r\n }\r\n\r\n public SetLocations2(locations: string[]): void {\r\n try {\r\n let locationsString = \"\";\r\n if (locations != null && locations.length > 0) {\r\n locationsString = locations.join(\";\");\r\n }\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n appCompose.location.getAsync(function (result) {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n const oldLocation: string[] = result.value.split(\";\");\r\n const newLocation = new Set([...oldLocation, ...locationsString.split(\";\")]);\r\n appCompose.location.setAsync((newLocation as any).filter((item) => !!item).join(\";\"));\r\n } else {\r\n appCompose.location.setAsync(locationsString);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n }\r\n\r\n public ReplaceLocation(locations: string[]): void {\r\n try {\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n appCompose.location.getAsync(function (result) {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n appCompose.location.setAsync(locations.join(\";\"));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n }\r\n\r\n public DeleteLocations(locations: string[]): void {\r\n try {\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n appCompose.location.getAsync(function (result) {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n const oldLocation: string[] = result.value.split(\";\");\r\n const newLocation = oldLocation.filter((item) => !locations.includes(item.trim()));\r\n appCompose.location.setAsync((newLocation as any).join(\";\"));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n }\r\n\r\n private _setLocations(locations: string[]) {\r\n let isUpdated = false;\r\n if (this._appointment.IsPlatformSupported) return isUpdated;\r\n try {\r\n let locationsString = \"\";\r\n if (locations != null && locations.length > 0) {\r\n locationsString = locations.join(\";\");\r\n }\r\n if (Office.context && Office.context.mailbox) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n appCompose.location.setAsync(locationsString);\r\n isUpdated = true;\r\n }\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return isUpdated;\r\n }\r\n private _startSuccess() {\r\n if (!this._running) {\r\n if (this._startedFlag.IsStarted) {\r\n this.OnStarted.Fire(this._running);\r\n this._running = true;\r\n }\r\n }\r\n }\r\n private _appointmentWatcher() {\r\n this._loadCustomProperties(null, this._loadCustomPropertiesCallback.bind(this));\r\n this._syncAppointmentInfo();\r\n this._subscribeApptEvent();\r\n if (\r\n !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\") ||\r\n WebAddinPlatforms.OutlookForMac === this._platformService.GetCurrentPlatform()\r\n ) {\r\n if (this._watchingFlag.EnableWatching) {\r\n setInterval(() => {\r\n this._processWatch();\r\n }, 3000);\r\n }\r\n }\r\n }\r\n private _syncAppointmentInfo() {\r\n let item = Office.context.mailbox.item;\r\n if (item) {\r\n let organizer = this._olOrganizerRepository.GetOrganizer();\r\n this._appointment.OrganizerEmail = this.Organizer?.Email;\r\n let watchTimeStamp: number = Date.now();\r\n //let allRecipients: OutlookRecipientDto[] = [];\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: {\r\n timeStamp: watchTimeStamp,\r\n isRecipientsUpdated: false,\r\n },\r\n };\r\n if (item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n //Sync required attendees\r\n appCompose.requiredAttendees.getAsync(option, this._watchRequiredRecipient.bind(this));\r\n\r\n let asyncContext: GetDateTimeAsyncContext = {\r\n Done: (_done: boolean) => {\r\n try {\r\n this._appointment.SeriesId = appCompose.seriesId;\r\n if (appCompose && appCompose.recurrence) {\r\n this._loadMeetingRecurrenceInfo(false);\r\n } else {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n } catch (ex) {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n },\r\n };\r\n let optionsStart: Office.AsyncContextOptions = {\r\n asyncContext: asyncContext,\r\n };\r\n\r\n appCompose.start.getAsync(optionsStart, this._watchStartTime.bind(this));\r\n appCompose.subject.getAsync(this._watchSubject.bind(this));\r\n }\r\n }\r\n }\r\n private _processWatch() {\r\n let item = Office.context.mailbox.item;\r\n\r\n let organizer = this._olOrganizerRepository.GetOrganizer();\r\n this._appointment.OrganizerEmail = this.Organizer?.Email;\r\n let watchTimeStamp: number = Date.now();\r\n //let allRecipients: OutlookRecipientDto[] = [];\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: {\r\n timeStamp: watchTimeStamp,\r\n isRecipientsUpdated: false,\r\n },\r\n };\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n //watch Start time & End time\r\n if (this._watchingFlag.EnableWatchRecipients) {\r\n appCompose.requiredAttendees.getAsync(option, this._watchRequiredRecipient.bind(this));\r\n }\r\n if (this._watchingFlag.EnableWatchTime) {\r\n appCompose.start.getAsync(this._watchStartTime.bind(this));\r\n }\r\n if (this._watchingFlag.EnableWatchSubject) {\r\n appCompose.subject.getAsync(this._watchSubject.bind(this));\r\n }\r\n }\r\n }\r\n\r\n private _subscribeApptEvent() {\r\n try {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n this._appointment.SeriesId = appCompose.seriesId;\r\n if (appCompose && appCompose.recurrence) {\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n appCompose.addHandlerAsync(\r\n Office.EventType.AppointmentTimeChanged,\r\n this._appTimeChangeHandler.bind(this),\r\n this._subscribeApptTimeChangedCallback.bind(this)\r\n );\r\n if (WebAddinPlatforms.OutlookForMac !== this._platformService.GetCurrentPlatform()) {\r\n appCompose.addHandlerAsync(\r\n Office.EventType.EnhancedLocationsChanged,\r\n this._resourceEnhancedLocationsChangedHandler.bind(this),\r\n {},\r\n (_result: Office.AsyncResult) => {\r\n //console.log(result);\r\n }\r\n );\r\n appCompose.addHandlerAsync(\r\n Office.EventType.RecipientsChanged,\r\n () => {\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: {\r\n isRecipientsUpdated: false,\r\n },\r\n };\r\n appCompose.requiredAttendees.getAsync(option, this._watchRequiredRecipient.bind(this));\r\n },\r\n {},\r\n (_result: Office.AsyncResult) => {\r\n //console.log(result);\r\n }\r\n );\r\n }\r\n }\r\n //appCompose.addHandlerAsync(Office.EventType.RecipientsChanged, this._appRecipientsChangeHandler.bind(this), this._subscribeApptRecipientsChangedCallback.bind(this));\r\n //if (Office.context.requirements.isSetSupported('Mailbox', '1.8')) {\r\n // appCompose.addHandlerAsync(Office.EventType.EnhancedLocationsChanged, this._watchEnhancedLocation.bind(this), this._subscribeEnhancedLocationsChangedCallback.bind(this));\r\n //}\r\n appCompose.addHandlerAsync(\r\n Office.EventType.RecurrenceChanged,\r\n this._recurringPatternChangeHandler.bind(this),\r\n {},\r\n this._recurringPatternChangeCallback.bind(this)\r\n );\r\n } else {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n // get async from enhance locations\r\n if (\r\n this._appointment.IsPlatformSupported &&\r\n this._platformService.GetCurrentPlatform() !== WebAddinPlatforms.OutlookForMac\r\n ) {\r\n let olRecipient: Office.LocationIdentifier = {\r\n id: \"...\",\r\n type: Office.MailboxEnums.LocationType.Custom,\r\n };\r\n let olRecipientsLocation = [olRecipient];\r\n appCompose.enhancedLocation.addAsync(olRecipientsLocation, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n appCompose.enhancedLocation.removeAsync(olRecipientsLocation, () => {\r\n this._lastAttendeeSynctime = Date.now();\r\n });\r\n });\r\n //appCompose.enhancedLocation.getAsync(option, this._resourceEnhancedLocation.bind(this));\r\n }\r\n }\r\n } catch (ex) {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n }\r\n\r\n private _resourceEnhancedLocationsChangedHandler(asyncResult: Office.EnhancedLocationsChangedEventArgs) {\r\n // update resources to appoiments\r\n try {\r\n if (asyncResult) {\r\n let rcResources: Array = asyncResult.enhancedLocations;\r\n let olResources: OutlookRecipient[] = rcResources\r\n ? rcResources.map(\r\n (rs) =>\r\n new OutlookRecipient(\r\n rs.emailAddress,\r\n rs.displayName,\r\n undefined,\r\n rs.locationIdentifier.type === Office.MailboxEnums.LocationType.Room\r\n ? ExchangeResourceTypeEnum.Room\r\n : ExchangeResourceTypeEnum.Equipment\r\n )\r\n )\r\n : [];\r\n\r\n olResources = olResources.filter((rs) => rs.Email != \"\");\r\n\r\n let isResourcesUpdated = this._appointment.UpdateResources(olResources);\r\n\r\n if (isResourcesUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n }\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n\r\n private _watchResourcesEnhancedLocation(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let timeStamp = asyncResult.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime) return;\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n let rcResources: Array = asyncResult.value;\r\n let olResources: OutlookRecipient[] = rcResources\r\n ? rcResources.map((rs) => new OutlookRecipient(rs.emailAddress, rs.displayName))\r\n : [];\r\n\r\n let isResourcesUpdated = this._appointment.UpdateResources(olResources);\r\n if (isResourcesUpdated) {\r\n asyncResult.asyncContext.isRecipientsUpdated = true;\r\n }\r\n\r\n if (asyncResult.asyncContext.isRecipientsUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n }\r\n\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n\r\n private _subscribeApptTimeChangedCallback(result: Office.AsyncResult) {\r\n if (result.status === Office.AsyncResultStatus.Succeeded) {\r\n this._watchingFlag.EnableWatchTime = false;\r\n }\r\n }\r\n\r\n private _appTimeChangeHandler(_eventArgs: any) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n appCompose.start.getAsync(this._watchStartTime.bind(this));\r\n }\r\n }\r\n\r\n private _loadMeetingRecurrenceInfo(isChanged: boolean, eventArgs?: Office.RecurrenceChangedEventArgs) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: {\r\n IsChanged: isChanged,\r\n Recurrence: eventArgs ? eventArgs.recurrence : null,\r\n },\r\n };\r\n appCompose.recurrence.getAsync(option, this._loadMeetingRecurrenceInfoCallback.bind(this));\r\n }\r\n }\r\n\r\n private _recurringPatternChangeCallback(_obj: any) {}\r\n\r\n private _recurringPatternChangeHandler(eventArgs: any) {\r\n // update Start Date And End Date\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n appCompose.start.getAsync(this._watchStartTime.bind(this));\r\n try {\r\n this._appointment.SeriesId = appCompose.seriesId;\r\n if (appCompose && appCompose.recurrence) {\r\n this._loadMeetingRecurrenceInfo(true, eventArgs);\r\n } else {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n } catch (ex) {\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n }\r\n }\r\n\r\n private async _loadMeetingRecurrenceInfoCallback(asyncResult: Office.AsyncResult) {\r\n let recurrenceInfo = asyncResult.value as Office.Recurrence;\r\n const newStartTime = await this.getStart();\r\n const newEndTime = await this.getEnd();\r\n if (asyncResult.asyncContext.Recurrence && !recurrenceInfo) {\r\n recurrenceInfo = asyncResult.asyncContext.Recurrence as Office.Recurrence;\r\n }\r\n let isOldRecurringMaster = this._appointment.IsRecurringMaster;\r\n if (recurrenceInfo == null || (this._appointment.SeriesId != null && this._appointment.SeriesId != \"\")) {\r\n this._appointment.IsRecurringMaster = false;\r\n this._appointment.Occurrences = [];\r\n if (this._appointment.SeriesId) {\r\n this._appointment.IsOccurence = true;\r\n }\r\n this._notifyRecurrenceChanged(isOldRecurringMaster, asyncResult, newStartTime, newEndTime);\r\n } else {\r\n RecurringHelper.GetRecurringDates(recurrenceInfo, 50, newStartTime).then((occurrences: any) => {\r\n this._appointment.IsRecurringMaster = true;\r\n this._appointment.Occurrences = occurrences;\r\n\r\n this._appointment.RecurringAppDuration = recurrenceInfo.seriesTime.getDuration().toString();\r\n this._appointment.IsNoEndDate = recurrenceInfo.seriesTime.getEndDate() == null;\r\n this._notifyRecurrenceChanged(isOldRecurringMaster, asyncResult, newStartTime, newEndTime);\r\n });\r\n }\r\n }\r\n private async _notifyRecurrenceChanged(\r\n isOldRecurringMaster: boolean,\r\n asyncResult: Office.AsyncResult,\r\n newStartTime?: Date,\r\n newEndTime?: Date\r\n ) {\r\n if (asyncResult.asyncContext && asyncResult.asyncContext.IsChanged) {\r\n let copyAppt = this._appointment.Export();\r\n // case recurrence changed.\r\n this.OnRecurrenceChanged.Fire({\r\n IsRecurringMaster: copyAppt.IsRecurringMaster ?? false,\r\n Series: {\r\n StartTicks: copyAppt.StartTimeTicks,\r\n EndTicks: copyAppt.EndTimeTicks,\r\n Start: newStartTime || copyAppt.StartTime,\r\n End: newEndTime || copyAppt.EndTime,\r\n },\r\n Occurrences: copyAppt.Occurrences ?? [],\r\n ChangeType:\r\n isOldRecurringMaster && copyAppt.IsRecurringMaster\r\n ? RecurringChangeTypeEnum.ChangePattern\r\n : isOldRecurringMaster && !copyAppt.IsRecurringMaster\r\n ? RecurringChangeTypeEnum.RecurringToNormal\r\n : RecurringChangeTypeEnum.NormalToRecurring,\r\n });\r\n } else {\r\n // case intialize recurrence info.\r\n this._startedFlag.Recurrence = true;\r\n this._startSuccess();\r\n }\r\n }\r\n\r\n private getEnd(): Promise {\r\n return new Promise((resolve, reject) => {\r\n Office.context.mailbox.item.end.getAsync({}, (res) => {\r\n if (res.status.toString().toLowerCase() === \"succeeded\") {\r\n let end = res.value;\r\n // let convertDT = Office.context.mailbox.convertToLocalClientTime(end);\r\n // end = Office.context.mailbox.convertToUtcClientTime(convertDT);\r\n resolve(end);\r\n } else {\r\n resolve(null);\r\n reject();\r\n }\r\n });\r\n });\r\n }\r\n\r\n private getStart(): Promise {\r\n return new Promise((resolve, reject) => {\r\n Office.context.mailbox.item.start.getAsync({}, (res) => {\r\n if (res.status.toString().toLowerCase() === \"succeeded\") {\r\n let end = res.value;\r\n // let convertDT = Office.context.mailbox.convertToLocalClientTime(end);\r\n // end = Office.context.mailbox.convertToUtcClientTime(convertDT);\r\n resolve(end);\r\n } else {\r\n resolve(null);\r\n reject();\r\n }\r\n });\r\n });\r\n }\r\n\r\n private _loadCustomProperties(context: any, callbacks: any) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n appCompose.loadCustomPropertiesAsync(callbacks, context);\r\n }\r\n }\r\n\r\n private _loadSessionData(_context: any, callbacks: any) {\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n appCompose.sessionData.getAllAsync(callbacks);\r\n }\r\n }\r\n\r\n private _watchRequiredRecipient(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let timeStamp = asyncResult.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime && !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\"))\r\n return;\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n let requiredRecipients: Array = asyncResult.value;\r\n let requiredOlRecipients: OutlookRecipient[] = requiredRecipients\r\n ? requiredRecipients.map((rs) => new OutlookRecipient(rs.emailAddress, rs.displayName))\r\n : [];\r\n\r\n let isResourcesUpdated = this._appointment.UpdateRequiredRecipients(requiredOlRecipients);\r\n\r\n if (isResourcesUpdated) {\r\n asyncResult.asyncContext.isRecipientsUpdated = true;\r\n }\r\n\r\n this._startedFlag.RequiredRecipients = true;\r\n\r\n //watch optional attendees\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: asyncResult.asyncContext,\r\n };\r\n let item = Office.context.mailbox.item;\r\n let appCompose = item as Office.AppointmentCompose;\r\n appCompose.optionalAttendees.getAsync(option, this._watchOptionalRecipient.bind(this));\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n private _watchOptionalRecipient(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let timeStamp = asyncResult.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime && !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\"))\r\n return;\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n\r\n let optionalRecipients: Array = asyncResult.value;\r\n let optionalOlRecipients: OutlookRecipient[] = optionalRecipients\r\n ? optionalRecipients.map((rs) => new OutlookRecipient(rs.emailAddress, rs.displayName))\r\n : [];\r\n let isAttendeesUpdated = this._appointment.UpdateOptionalAttendees(optionalOlRecipients);\r\n\r\n if (isAttendeesUpdated) {\r\n asyncResult.asyncContext.isRecipientsUpdated = true;\r\n }\r\n this._startedFlag.OptionalRecipients = true;\r\n let item = Office.context.mailbox.item;\r\n let appCompose = item as Office.AppointmentCompose;\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: asyncResult.asyncContext,\r\n };\r\n\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n if (\r\n (appCompose as any) &&\r\n (appCompose.enhancedLocation as any) &&\r\n this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac\r\n ) {\r\n let enhancedLoc: Office.EnhancedLocation = appCompose.enhancedLocation;\r\n enhancedLoc.getAsync(option, this._watchEnhancedLocations.bind(this));\r\n }\r\n } else {\r\n //watchResources for SetSupported < v1.8\r\n //if rcExtendedResources does not exist: check changes and fire event immediately\r\n try {\r\n if ((appCompose as any).rcExtendedResources) {\r\n (appCompose as any).rcExtendedResources.getAsync(option, this._watchRCExtendedResources.bind(this));\r\n }\r\n } catch (ex) {\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: asyncResult.asyncContext,\r\n };\r\n this._loadCustomProperties(option, this._watchRCExtendedCustomResources.bind(this));\r\n }\r\n // this._loadCustomProperties(option, this._watchRCExtendedResources.bind(this));\r\n }\r\n\r\n if (asyncResult.asyncContext.isRecipientsUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n }\r\n\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n private _watchEnhancedLocations(asyncResult: Office.AsyncResult) {\r\n try {\r\n let timeStamp = asyncResult.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime && !Office.context.requirements.isSetSupported(\"Mailbox\", \"1.8\")) {\r\n return;\r\n }\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) {\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n return;\r\n }\r\n let rcResources: Office.LocationDetails[] = asyncResult.value;\r\n let olResources: OutlookRecipient[] = rcResources\r\n ? rcResources.map((rs) => {\r\n let emailAddress = rs.emailAddress;\r\n if (\r\n !emailAddress &&\r\n rs.locationIdentifier &&\r\n this._platformService.GetCurrentPlatform() === WebAddinPlatforms.OutlookForMac\r\n ) {\r\n emailAddress = rs.locationIdentifier.id;\r\n }\r\n return new OutlookRecipient(emailAddress, rs.displayName);\r\n })\r\n : [];\r\n\r\n let isResourcesUpdated = this._appointment.UpdateResources(olResources);\r\n if (isResourcesUpdated) {\r\n asyncResult.asyncContext.isRecipientsUpdated = true;\r\n }\r\n if (asyncResult.asyncContext.isRecipientsUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n }\r\n\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n\r\n private _watchRCExtendedCustomResources(asyncResult: Office.AsyncResult) {\r\n try {\r\n let customProperties: Office.CustomProperties = asyncResult.value;\r\n let customRcExtendedResources = customProperties.get(this._rcExtendedResourcesKey);\r\n // let timeStampStr = customProperties.get(this._rcExtendedResourcesTimeStampKey);\r\n if (!customRcExtendedResources) return;\r\n //if (!timeStampStr)\r\n //timeStampStr = '0';\r\n let newResources = JSON.parse(customRcExtendedResources);\r\n let rcResources: Array = newResources.map((rs: any) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.displayName,\r\n emailAddress: rs.emailAddress,\r\n };\r\n return olRecipient;\r\n });\r\n\r\n let timeStamp = asyncResult.asyncContext.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime) return;\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n //let rcResources: Array = asyncResult.value;\r\n let olResources: OutlookRecipient[] = rcResources\r\n ? rcResources.map((rs) => new OutlookRecipient(rs.emailAddress, rs.displayName))\r\n : [];\r\n\r\n let isResourcesUpdated = this._appointment.UpdateResources(olResources);\r\n if (isResourcesUpdated) {\r\n asyncResult.asyncContext.isRecipientsUpdated = true;\r\n }\r\n\r\n if (asyncResult.asyncContext.isRecipientsUpdated) {\r\n let allRecipients = this._appointment.ExportRecipients();\r\n this.OnRecipientsChanged.Fire(allRecipients);\r\n this._notifyChange();\r\n }\r\n\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n private _watchRCExtendedResources(asyncResult: Office.AsyncResult>) {\r\n try {\r\n let timeStamp = asyncResult.asyncContext.timeStamp as number;\r\n if (timeStamp < this._lastAttendeeSynctime) return;\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n let option: Office.AsyncContextOptions = {\r\n asyncContext: asyncResult.asyncContext,\r\n };\r\n this._loadCustomProperties(option, this._watchRCExtendedCustomResources.bind(this));\r\n\r\n //let rcResources: Array = asyncResult.value;\r\n //let olResources: OutlookRecipient[] = rcResources ? rcResources.map(rs => new OutlookRecipient(rs.emailAddress, rs.displayName)) : [];\r\n\r\n //let isResourcesUpdated = this._appointment.UpdateResources(olResources);\r\n //if (isResourcesUpdated) {\r\n // asyncResult.asyncContext.isRecipientsUpdated = true;\r\n //}\r\n\r\n //if (asyncResult.asyncContext.isRecipientsUpdated) {\r\n // let allRecipients = this._appointment.ExportRecipients();\r\n // this.OnRecipientsChanged.Fire(allRecipients);\r\n // this._notifyChange();\r\n //}\r\n\r\n this._startedFlag.Resources = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n }\r\n }\r\n private _watchStartTime(asyncResult: Office.AsyncResult) {\r\n try {\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n // if start time is locked, stop process.\r\n if (this._locker.DateTime) {\r\n let intervalId = setInterval(() => {\r\n if (!this._locker.DateTime) {\r\n clearInterval(intervalId);\r\n }\r\n }, 1);\r\n }\r\n this._locker.DateTime = true;\r\n\r\n //let isStartTimeChanged = this._getStartTimeResult(asyncResult);\r\n // process get end time.\r\n let item = Office.context.mailbox.item;\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n\r\n let asyncContextStart: GetDateTimeAsyncContext = {\r\n Done: (isStartTimeChanged: boolean) => {\r\n try {\r\n let asyncContext: GetDateTimeAsyncContext = {\r\n Done: (isEndTimeChanged: boolean) => {\r\n try {\r\n if (isEndTimeChanged || isStartTimeChanged) {\r\n this._processChangeDateTime();\r\n }\r\n this._startedFlag.EndTime = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n this._locker.DateTime = false;\r\n }\r\n if (asyncResult.asyncContext != null) {\r\n let asyncContext = asyncResult.asyncContext as GetDateTimeAsyncContext;\r\n asyncContext.Done(true);\r\n }\r\n },\r\n };\r\n let options: Office.AsyncContextOptions = {\r\n asyncContext: asyncContext,\r\n };\r\n appCompose.end.getAsync(options, this._getEndTimeResult.bind(this));\r\n this._startedFlag.StartTime = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n this._locker.DateTime = false;\r\n }\r\n this._startedFlag.StartTime = true;\r\n this._startSuccess();\r\n },\r\n };\r\n let optionsStart: Office.AsyncContextOptions = {\r\n asyncContext: asyncContextStart,\r\n };\r\n appCompose.start.getAsync(optionsStart, this._getStartTimeResult.bind(this));\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n this._locker.DateTime = false;\r\n }\r\n }\r\n private async _getStartTimeResult(asyncResult: Office.AsyncResult): Promise {\r\n let isStartTimeUpdated = false;\r\n try {\r\n let start: Date = asyncResult.value;\r\n // if (Office.context.platform == Office.PlatformType.OfficeOnline) {\r\n // let convertDT = Office.context.mailbox.convertToLocalClientTime(start);\r\n // start = Office.context.mailbox.convertToUtcClientTime(convertDT);\r\n // }\r\n\r\n isStartTimeUpdated = await this._appointment.UpdateStartTime(start);\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n if (asyncResult.asyncContext != null) {\r\n let asyncContext = asyncResult.asyncContext as GetDateTimeAsyncContext;\r\n asyncContext.Done(isStartTimeUpdated);\r\n }\r\n return isStartTimeUpdated;\r\n }\r\n private async _getEndTimeResult(asyncResult: Office.AsyncResult): Promise {\r\n let isEndTimeUpdated = false;\r\n try {\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value != null) {\r\n let end: Date = asyncResult.value;\r\n // if (Office.context.platform == Office.PlatformType.OfficeOnline) {\r\n // let convertDT = Office.context.mailbox.convertToLocalClientTime(end);\r\n // end = Office.context.mailbox.convertToUtcClientTime(convertDT);\r\n // }\r\n isEndTimeUpdated = await this._appointment.UpdateEndTime(end);\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n if (asyncResult.asyncContext != null) {\r\n let asyncContext = asyncResult.asyncContext as GetDateTimeAsyncContext;\r\n asyncContext.Done(isEndTimeUpdated);\r\n }\r\n return isEndTimeUpdated;\r\n }\r\n private _processChangeDateTime() {\r\n // process notify the change date/time event if and only if the appointment is not recurring series.\r\n // because in this case, the change recurrence event is notified insteads.\r\n if (!this._appointment.IsRecurringMaster) {\r\n this._notifyChange();\r\n let copyAppt = this._appointment.Export();\r\n let eventArg: DateTimePeriodDto = {\r\n StartTicks: copyAppt.StartTimeTicks,\r\n EndTicks: copyAppt.EndTimeTicks,\r\n Start: copyAppt.StartTime,\r\n End: copyAppt.EndTime,\r\n };\r\n this.OnDateTimeChanged.Fire(eventArg);\r\n }\r\n }\r\n private _watchSubject(asyncResult: Office.AsyncResult) {\r\n try {\r\n if (asyncResult.status !== Office.AsyncResultStatus.Succeeded || asyncResult.value == null) {\r\n return;\r\n }\r\n // if subject in appointment is locked, stop process.\r\n if (this._locker.Subject) {\r\n let intervalId = setInterval(() => {\r\n if (!this._locker.DateTime) {\r\n clearInterval(intervalId);\r\n }\r\n }, 1);\r\n }\r\n this._locker.Subject = true;\r\n let subject = asyncResult.value;\r\n let isSubjectUpdated = this._appointment.UpdateSubject(subject);\r\n if (isSubjectUpdated) {\r\n this._notifyChange();\r\n }\r\n this._startedFlag.Subject = true;\r\n this._startSuccess();\r\n } catch (ex) {\r\n //console.log(ex);\r\n } finally {\r\n this._locker.Subject = false;\r\n }\r\n }\r\n\r\n private async getUidForDesktop(): Promise {\r\n try {\r\n let getMessageUrl = await this.GetMessageUrlCallback();\r\n getMessageUrl = getMessageUrl.replace(\r\n \"?$select=iCalUId,originalStart\",\r\n `?&$expand=singleValueExtendedProperties($filter=id eq 'String {00020329-0000-0000-C000-000000000046} Name cecp-54abccb0-533f-4f37-9b9e-b4834331f0b1')&$select=id`\r\n );\r\n const authenticationService: AuthenticationService = new AuthenticationService();\r\n const accessToken = await authenticationService.GetCallbackToken();\r\n return axios\r\n .get(getMessageUrl, {\r\n headers: {\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n })\r\n .then((res) => {\r\n const singleValueExtendedPropertiesValue = JSON.parse(\r\n res.data?.singleValueExtendedProperties[0] && res.data?.singleValueExtendedProperties[0]?.value\r\n ? res.data?.singleValueExtendedProperties[0]?.value\r\n : \"{}\"\r\n );\r\n return singleValueExtendedPropertiesValue?.CUSTOM_UID || \"\";\r\n })\r\n .catch(() => {\r\n return \"\";\r\n });\r\n } catch {\r\n return \"\";\r\n }\r\n }\r\n\r\n private async _loadCustomPropertiesCallback(asyncResult: Office.AsyncResult) {\r\n let customProperties: Office.CustomProperties = asyncResult.value;\r\n let customUid = customProperties.get(this._customUidKey);\r\n if (!customUid) {\r\n let currentPlatform = this._platformService.GetCurrentPlatform();\r\n if (currentPlatform === WebAddinPlatforms.DesktopClient || currentPlatform === WebAddinPlatforms.Outlook2016) {\r\n const uidApi = await this.getUidForDesktop();\r\n if (uidApi) {\r\n customUid = uidApi;\r\n }\r\n }\r\n }\r\n let uid = customProperties.get(this._uidKey);\r\n if (uid && uid != \"\") {\r\n this._appointment.Uid = uid;\r\n }\r\n if (customUid && customUid != \"\") {\r\n if (!uid || uid == \"\") {\r\n this._appointment.Uid = customUid;\r\n }\r\n this._appointment.CustomUid = customUid;\r\n } else {\r\n if (this._appointment.CustomUid && this._appointment.CustomUid != \"\") {\r\n customProperties.set(this._customUidKey, this._appointment.CustomUid);\r\n customProperties.saveAsync();\r\n }\r\n }\r\n this._startedFlag.CustomProperties = true;\r\n this._startSuccess();\r\n }\r\n\r\n private _setCustomRcExtendedResources(receipients: Array, isAdd: boolean) {\r\n if ((receipients != null && receipients.length > 0) || !isAdd) {\r\n let properties: IHash = {};\r\n properties[this._rcExtendedResourcesKey] = JSON.stringify(receipients);\r\n // properties[this._rcExtendedResourcesTimeStampKey] = Date.now().toString();\r\n this._lastAttendeeSynctime = Date.now();\r\n //this._setCustomProperty(properties);\r\n let asyncContext: SetCustomPropertiesAsyncContext = {\r\n Properties: properties,\r\n IsAdd: isAdd,\r\n };\r\n this._loadCustomProperties(asyncContext, this._setCustomRcExtendedResourcesCallback.bind(this));\r\n }\r\n }\r\n\r\n private _setCustomRcExtendedResourcesCallback(asyncResult: Office.AsyncResult) {\r\n if (asyncResult.asyncContext) {\r\n let customProperties: Office.CustomProperties = asyncResult.value;\r\n if (customProperties) {\r\n let asyncContext = asyncResult.asyncContext as SetCustomPropertiesAsyncContext;\r\n if (asyncContext.Properties) {\r\n for (let key in asyncContext.Properties) {\r\n if (key == this._rcExtendedResourcesKey && asyncContext.IsAdd) {\r\n //current\r\n let customRcExtendedResources = customProperties.get(this._rcExtendedResourcesKey);\r\n if (customRcExtendedResources) {\r\n let currentResources = JSON.parse(customRcExtendedResources);\r\n let rcResources: Array = currentResources.map((rs: any) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.displayName,\r\n emailAddress: rs.emailAddress,\r\n };\r\n return olRecipient;\r\n });\r\n //new\r\n let newResources = JSON.parse(asyncContext.Properties[key]);\r\n let rcNewResources: Array = newResources.map((rs: any) => {\r\n let olRecipient: Office.EmailUser = {\r\n displayName: rs.displayName,\r\n emailAddress: rs.emailAddress,\r\n };\r\n return olRecipient;\r\n });\r\n rcNewResources.forEach((t) => {\r\n var existed = rcResources.filter(\r\n (x) => x.displayName == t.displayName && x.emailAddress == t.emailAddress\r\n );\r\n if (existed.length <= 0) {\r\n rcResources.push(t);\r\n }\r\n });\r\n customProperties.set(key, JSON.stringify(rcResources));\r\n } else {\r\n customProperties.set(key, asyncContext.Properties[key]);\r\n }\r\n } else {\r\n customProperties.set(key, asyncContext.Properties[key]);\r\n }\r\n }\r\n customProperties.saveAsync(this.saveCallback);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private clearAllCustomProperties(): void {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n item.loadCustomPropertiesAsync((asyncResult) => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n // Handle error\r\n console.error(\"Failed to load custom properties:\", asyncResult.error.message);\r\n return;\r\n }\r\n\r\n const customProps = asyncResult.value;\r\n const allKeys = customProps.getAll();\r\n for (const key in allKeys) {\r\n if (allKeys.hasOwnProperty(key)) {\r\n customProps.remove(key);\r\n }\r\n }\r\n\r\n // Save the changes\r\n customProps.saveAsync((saveAsyncResult) => {\r\n if (saveAsyncResult.status === Office.AsyncResultStatus.Failed) {\r\n // Handle error on save\r\n console.error(\"Failed to save custom properties:\", saveAsyncResult.error.message);\r\n } else {\r\n //console.log(\"All custom properties cleared.\");\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n saveCallback = (asyncResult: Office.AsyncResult): void => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n console.error(asyncResult.error.message);\r\n } else {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n console.log(\r\n item.loadCustomPropertiesAsync((a) => {\r\n console.log(a.value.getAll());\r\n })\r\n );\r\n }\r\n // Proceed with the appropriate action for your add-in.\r\n }\r\n };\r\n\r\n public UpdateBodyForSendToAll(_key: string, sendToAll: boolean): Promise {\r\n return new Promise((resolve) => {\r\n if (sendToAll) {\r\n let currentPlatform = this._platformService.GetCurrentPlatform();\r\n if (WebAddinPlatforms.OutlookForMac === currentPlatform || WebAddinPlatforms.OWA === currentPlatform) {\r\n let item = Office.context.mailbox.item;\r\n let appCompose = item as Office.AppointmentCompose;\r\n if (appCompose) {\r\n let htmlOptions: Office.AsyncContextOptions & Office.CoercionTypeOptions = {\r\n asyncContext: null,\r\n coercionType: Office.CoercionType.Html,\r\n };\r\n appCompose.body.getAsync(Office.CoercionType.Html, (asyncResult: Office.AsyncResult) => {\r\n if (Office.AsyncResultStatus.Succeeded === asyncResult.status) {\r\n let prependedBody = asyncResult.value + \" \";\r\n appCompose.body.setAsync(prependedBody, htmlOptions, (asyncResult: any) => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } else {\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n }\r\n private _setCustomProperty(properties: IHash) {\r\n let asyncContext: SetCustomPropertiesAsyncContext = {\r\n Properties: properties,\r\n };\r\n this._loadCustomProperties(asyncContext, this._setCustomPropertyCallback.bind(this));\r\n }\r\n private _setCustomPropertyCallback(asyncResult: Office.AsyncResult) {\r\n if (asyncResult.asyncContext) {\r\n let customProperties: Office.CustomProperties = asyncResult.value;\r\n if (customProperties) {\r\n let asyncContext = asyncResult.asyncContext as SetCustomPropertiesAsyncContext;\r\n if (asyncContext.Properties) {\r\n for (let key in asyncContext.Properties) {\r\n customProperties.set(key, asyncContext.Properties[key]);\r\n }\r\n customProperties.saveAsync();\r\n }\r\n }\r\n }\r\n }\r\n private _notifyChange() {\r\n if (this.OnChanged) {\r\n this.OnChanged.Fire(this._appointment.Export());\r\n }\r\n }\r\n public IsNewBooking(): boolean {\r\n return this._appointment.IsNewBooking();\r\n }\r\n\r\n private _extendAppointment() {\r\n let appCompose = Office.context.mailbox.item as any;\r\n if (!appCompose.rcExtendedResources) {\r\n appCompose.rcExtendedResources = {\r\n _propertyName$p$0: \"rcExtendedResources\",\r\n _type$p$0: 0,\r\n };\r\n appCompose.rcExtendedResources = appCompose.requiredAttendees;\r\n appCompose.rcExtendedResources._propertyName$p$0 = \"rcExtendedResources\";\r\n appCompose.rcExtendedResources._type$p$0 = 0;\r\n }\r\n }\r\n\r\n SaveDataResourceInfo(data: Record, key: string): void {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n item.sessionData.setAsync(key, JSON.stringify(data));\r\n }\r\n }\r\n\r\n ConvertTimeDisplayLocalUTC(dateTime: Date): Date {\r\n if (Office.context.platform == Office.PlatformType.OfficeOnline) {\r\n let convertDT = Office.context.mailbox.convertToLocalClientTime(dateTime);\r\n dateTime = Office.context.mailbox.convertToUtcClientTime(convertDT);\r\n return dateTime;\r\n }\r\n console.log(\"dateTime\", dateTime);\r\n\r\n return dateTime;\r\n }\r\n\r\n CreateNewUid(): Promise {\r\n const uid = UidGenerator.NewUid();\r\n return new Promise((resolve, reject) => {\r\n // try {\r\n // let properties: IHash = {};\r\n // properties[this._customUidKey] = uid;\r\n // this._setCustomProperty(properties);\r\n // resolve(uid);\r\n // } catch {\r\n // reject(\"\");\r\n // }\r\n let properties: IHash = {};\r\n properties[this._customUidKey] = uid;\r\n let asyncContext: SetCustomPropertiesAsyncContext = {\r\n Properties: properties,\r\n };\r\n this._loadCustomProperties(asyncContext, (asyncResult: Office.AsyncResult) => {\r\n if (asyncResult.asyncContext) {\r\n let customProperties: Office.CustomProperties = asyncResult.value;\r\n if (customProperties) {\r\n let asyncContext = asyncResult.asyncContext as SetCustomPropertiesAsyncContext;\r\n if (asyncContext.Properties) {\r\n for (let key in asyncContext.Properties) {\r\n customProperties.set(key, asyncContext.Properties[key]);\r\n }\r\n customProperties.saveAsync();\r\n resolve(uid)\r\n } else {\r\n reject(\"\")\r\n }\r\n } else {\r\n reject(\"\")\r\n }\r\n }\r\n });\r\n });\r\n }\r\n}\r\n// let resVersion = Office.MailboxEnums.RestVersion.v2_0;\r\n// let strRestid = Office.context.mailbox.convertToRestId(currentAppt.ItemId, resVersion);\r\n// let getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/events/' + strRestid + \"?$select=iCalUId,originalStart\";\r\ninterface GetDateTimeAsyncContext {\r\n Done: (args?: any) => void;\r\n}\r\n\r\ninterface SetCustomPropertiesAsyncContext {\r\n Properties: IHash;\r\n IsAdd?: boolean;\r\n}\r\n","import { ConvertUtils, IPlatformService, WebAddinPlatforms } from \"booking-app-op\";\r\n\r\nexport class PlatformService implements IPlatformService {\r\n IsSetSupported(name: string, minVersion?: string): boolean {\r\n return Office.context.requirements.isSetSupported(name, minVersion);\r\n }\r\n GetDateTimeOffset(): number {\r\n return Office.context.mailbox.convertToLocalClientTime(new Date()).timezoneOffset;\r\n }\r\n GetCurrentPlatform(): WebAddinPlatforms {\r\n if (Office.context.diagnostics) {\r\n let currentPlatforms = Office.context.diagnostics;\r\n if (currentPlatforms.host === Office.HostType.Outlook) {\r\n if (currentPlatforms.platform === Office.PlatformType.Mac) {\r\n return WebAddinPlatforms.OutlookForMac;\r\n } else {\r\n if (currentPlatforms.platform === Office.PlatformType.PC) {\r\n let version = currentPlatforms.version;\r\n let versionArr = version.split(\".\");\r\n if (ConvertUtils.ToInt(versionArr[0]) === 16) {\r\n return WebAddinPlatforms.Outlook2016;\r\n }\r\n return WebAddinPlatforms.DesktopClient;\r\n }\r\n if (currentPlatforms.platform === Office.PlatformType.OfficeOnline) {\r\n return WebAddinPlatforms.OWA;\r\n }\r\n }\r\n }\r\n } else {\r\n let currentPlatforms = Office.context.mailbox.diagnostics;\r\n if (currentPlatforms) {\r\n let version = currentPlatforms.hostVersion;\r\n let versionArr = version.split(\".\");\r\n if (ConvertUtils.ToInt(versionArr[0]) === 16) {\r\n return WebAddinPlatforms.Outlook2016;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n GetPlatformString(): string {\r\n if (Office.context.diagnostics) {\r\n let currentPlatforms = Office.context.diagnostics;\r\n if (currentPlatforms.host === Office.HostType.Outlook) {\r\n if (currentPlatforms.platform === Office.PlatformType.Mac) {\r\n return \"OutlookForMac\";\r\n } else {\r\n if (currentPlatforms.platform === Office.PlatformType.PC) {\r\n return \"OutlookBuild \" + currentPlatforms.version;\r\n }\r\n if (currentPlatforms.platform === Office.PlatformType.OfficeOnline) {\r\n return \"OfficeOnline\";\r\n }\r\n }\r\n }\r\n } else {\r\n let currentPlatforms = Office.context.mailbox.diagnostics;\r\n if (currentPlatforms) {\r\n return \"OutlookBuild \" + currentPlatforms.hostVersion;\r\n }\r\n }\r\n return \"\"; // Add this line to return an empty string if no conditions are met\r\n }\r\n\r\n public static IsOnPremSystem() {\r\n return Office.context.mailbox.userProfile.accountType == \"enterprise\";\r\n }\r\n\r\n public static GetSpecificVersion(): number {\r\n let _isStopCheck = false;\r\n let baseVersion = 9;\r\n while (!_isStopCheck) {\r\n if (Office.context.requirements.isSetSupported(\"Mailbox\", \"1.\" + baseVersion.toString()) || baseVersion == 0) {\r\n _isStopCheck = true;\r\n }\r\n baseVersion--;\r\n }\r\n return baseVersion;\r\n }\r\n\r\n public static GetRunningPlatform(): Office.PlatformType {\r\n if (Office.context.diagnostics) {\r\n return Office.context.diagnostics.platform;\r\n } else {\r\n return Office.PlatformType.PC;\r\n }\r\n }\r\n}\r\n","// Importing necessary types and interfaces from \"booking-app-op\" module\r\nimport { IVrService } from \"booking-app-op\";\r\n\r\n// Implementation of IDialogService interface\r\nexport class VrService implements IVrService {\r\n // Method to display a dialog box\r\n\r\n SaveSessionDataDialog(sessionData: string): void {\r\n if (sessionData && sessionData != \"\") {\r\n const item = Office.context.mailbox.item;\r\n const asyncContext = sessionData || \"\";\r\n if (item) {\r\n item.loadCustomPropertiesAsync(this.customPropsCallback, asyncContext);\r\n item.sessionData.getAsync(\"TEMP\", (asyncResult) => {\r\n this.sessionCallback(asyncResult, sessionData);\r\n });\r\n }\r\n }\r\n }\r\n\r\n private sessionCallback = (asyncResult: Office.AsyncResult, sessionData: string): void => {\r\n let currentValue = asyncResult.value || \"\";\r\n\r\n // Checking and concatenating values\r\n if (currentValue.indexOf(\",\") > -1) {\r\n const existingValues = new Set(currentValue.split(\",\"));\r\n const newValues = sessionData.split(\",\");\r\n newValues.forEach((value) => existingValues.add(value)); // Avoid duplicates\r\n currentValue = Array.from(existingValues).join(\",\");\r\n } else if (currentValue && sessionData) {\r\n currentValue += \",\" + sessionData;\r\n } else {\r\n currentValue = sessionData;\r\n }\r\n\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n item.sessionData.setAsync(\"TEMP\", currentValue);\r\n }\r\n };\r\n\r\n customPropsCallback = (asyncResult: Office.AsyncResult): void => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n // Handle error\r\n return;\r\n }\r\n\r\n const customProps = asyncResult.value;\r\n let rcTempId = customProps.get(\"rcTempId\") || \"\";\r\n const newValue = asyncResult.asyncContext as string;\r\n // Checking and concatenating values\r\n if (rcTempId.indexOf(\",\") > -1) {\r\n const existingValues = new Set(rcTempId.split(\",\"));\r\n const newValues = newValue.split(\",\");\r\n newValues.forEach((value) => existingValues.add(value)); // Avoid duplicates\r\n rcTempId = Array.from(existingValues).join(\",\");\r\n } else if (rcTempId && newValue) {\r\n rcTempId += \",\" + newValue;\r\n } else {\r\n rcTempId = newValue;\r\n }\r\n\r\n customProps.set(\"rcTempId\", rcTempId);\r\n customProps.saveAsync(this.saveCallback);\r\n };\r\n\r\n saveCallback = (asyncResult: Office.AsyncResult): void => {\r\n if (asyncResult.status === Office.AsyncResultStatus.Failed) {\r\n console.error(asyncResult.error.message);\r\n } else {\r\n const item = Office.context.mailbox.item;\r\n if (item) {\r\n console.log(\r\n item.loadCustomPropertiesAsync((a) => {\r\n console.log(a.value.getAll());\r\n })\r\n );\r\n }\r\n // Proceed with the appropriate action for your add-in.\r\n }\r\n };\r\n}\r\n","export * from \"./OutlookAppointmentManager\"\r\nexport * from \"./PlatformService\"\r\nexport * from \"./OutlookAppointmentExtractor\"","import { IHash, DateTimePeriodDto, UidGenerator, OutlookRecipientTypeEnum, convertToNetTicks, OutlookRecipientDto, ExchangeResourceTypeEnum, OutlookAppointmentDto } from \"booking-app-op\";\r\nimport { DateTimePeriod } from \"./DateTimePeriod\";\r\nimport { OutlookRecipient } from \"./OutlookRecipient\";\r\n\r\nexport class OutlookAppointment {\r\n private _minVersionPlatform: number = 1.8;\r\n private _uid: string;\r\n private _customUid: string;\r\n private _globalId: string;\r\n private _guid?: string;\r\n private _haveOrder: boolean;\r\n private _haveNormalOrder: boolean;\r\n private _startInTicks: number;\r\n private _endInTicks: number;\r\n private _start: Date;\r\n private _end: Date;\r\n private _subject: string;\r\n private _requiredRecipients: Array;\r\n private _requiredRecipientsMap: IHash;\r\n private _optionalRecipients: Array;\r\n private _optionalRecipientsMap: IHash;\r\n private _resources: Array;\r\n private _resourcesMap: IHash;\r\n private _organizerEmail?: string;\r\n private _organizerInRequiredAttendees: OutlookRecipient | undefined;\r\n private _isRecurringMaster: boolean;\r\n private _isNoEndDate: boolean;\r\n private _isOccurence?: boolean;\r\n private _seriesId?: string;\r\n private readonly _occurrences: Array;\r\n private _itemId: string;\r\n private _originalStart: string;\r\n private _originalEnd: string;\r\n private _recurringAppDuration: string;\r\n private _isReOpenAfterSent: boolean;\r\n IsReOpen?: boolean;\r\n // private _applicationSettingsService: IApplicationSettingsService;\r\n\r\n\r\n private _sessionId: string;\r\n\r\n public set IsReOpenAfterSent(isReopenAfterSent: boolean) {\r\n this._isReOpenAfterSent = isReopenAfterSent;\r\n }\r\n\r\n public get IsReOpenAfterSent() {\r\n return this._isReOpenAfterSent;\r\n }\r\n\r\n public get RecurringAppDuration() {\r\n return this._recurringAppDuration;\r\n }\r\n public set RecurringAppDuration(value: string) {\r\n this._recurringAppDuration = value;\r\n }\r\n public get OriginalEnd() {\r\n return this._originalEnd;\r\n }\r\n public set OriginalEnd(value: string) {\r\n this._originalEnd = value;\r\n }\r\n public get OriginalStart() {\r\n return this._originalStart;\r\n }\r\n public set OriginalStart(value: string) {\r\n this._originalStart = value;\r\n }\r\n public get ItemId() {\r\n return this._itemId;\r\n }\r\n public set ItemId(itemId: string) {\r\n this._itemId = itemId;\r\n }\r\n public get Uid() {\r\n return this._uid;\r\n }\r\n public set Uid(uid: string) {\r\n this._uid = uid;\r\n }\r\n public get CustomUid() {\r\n return this._customUid;\r\n }\r\n public set CustomUid(customUid: string) {\r\n this._customUid = customUid;\r\n }\r\n public get GlobalId() {\r\n return this._globalId;\r\n }\r\n public set GlobalId(globalId: string) {\r\n this._globalId = globalId;\r\n }\r\n public get Guid() {\r\n return this._guid;\r\n }\r\n public set Guid(guid: string | undefined) {\r\n this._guid = guid;\r\n }\r\n public get RequiredRecipients(): Array {\r\n return this._copyRecipients(this._requiredRecipients);\r\n }\r\n public get OptionalRecipients(): Array {\r\n return this._copyRecipients(this._optionalRecipients);\r\n }\r\n public get Resources(): Array {\r\n return this._copyRecipients(this._resources);\r\n }\r\n public get Recipients(): Array {\r\n let recipients: Array = this.RequiredRecipients;\r\n recipients = recipients.concat(this.OptionalRecipients);\r\n if (this.Resources && this.Resources.length > 0) {\r\n this.Resources.forEach((rs) => {\r\n recipients = recipients.filter(\r\n (t) => t.Email.toLowerCase() != rs.Email.toLowerCase()\r\n );\r\n });\r\n }\r\n recipients = recipients.concat(this.Resources);\r\n return recipients;\r\n }\r\n public get Occurrences(): Array {\r\n let occurrences: DateTimePeriodDto[] = [];\r\n this._occurrences.forEach((item: DateTimePeriod) => {\r\n occurrences.push({\r\n StartTicks: item.StartTicks,\r\n EndTicks: item.EndTicks,\r\n Start: item.Start,\r\n End: item.End,\r\n StartInOrgTz: item.StartInOrgTz,\r\n EndInOrgTz: item.EndInOrgTz,\r\n IsDeleted: item.IsDeleted\r\n });\r\n });\r\n return occurrences;\r\n }\r\n public set SeriesId(value: string | undefined) {\r\n this._seriesId = value;\r\n }\r\n public get SeriesId(): string | undefined {\r\n return this._seriesId;\r\n }\r\n public set Occurrences(occurrences: Array) {\r\n // empty the recurring dates list.\r\n this._occurrences.length = 0;\r\n if (!occurrences || occurrences.length == 0) return;\r\n occurrences.forEach((dto: DateTimePeriodDto) => {\r\n this._occurrences.push({\r\n StartTicks: dto.StartTicks,\r\n EndTicks: dto.EndTicks,\r\n Start: dto.Start,\r\n End: dto.End,\r\n StartInOrgTz: dto.StartInOrgTz,\r\n EndInOrgTz: dto.EndInOrgTz,\r\n IsDeleted: dto.IsDeleted\r\n });\r\n });\r\n }\r\n public get IsRecurringMaster(): boolean {\r\n return this._isRecurringMaster;\r\n }\r\n public set IsRecurringMaster(value: boolean) {\r\n this._isRecurringMaster = value;\r\n }\r\n public get IsNoEndDate(): boolean {\r\n return this._isNoEndDate;\r\n }\r\n public set IsNoEndDate(value: boolean) {\r\n this._isNoEndDate = value;\r\n }\r\n public get IsOccurence(): boolean | undefined {\r\n return this._isOccurence;\r\n }\r\n public set IsOccurence(value: boolean | undefined) {\r\n this._isOccurence = value;\r\n }\r\n\r\n public get HaveOrder(): boolean {\r\n return this._haveOrder;\r\n }\r\n public set HaveOrder(value: boolean) {\r\n this._haveOrder = value;\r\n }\r\n public get HaveNormalOrder(): boolean {\r\n return this._haveNormalOrder;\r\n }\r\n public set HaveNormalOrder(value: boolean) {\r\n this._haveNormalOrder = value;\r\n }\r\n constructor() {\r\n this._startInTicks = 0;\r\n this._endInTicks = 0;\r\n this._subject = \"\";\r\n this._requiredRecipients = [];\r\n this._requiredRecipientsMap = {};\r\n this._optionalRecipients = [];\r\n this._optionalRecipientsMap = {};\r\n this._resources = [];\r\n this._resourcesMap = {};\r\n this._uid = this._customUid = UidGenerator.NewUid();\r\n //this._uid = this._customUid = '';\r\n this._sessionId = UidGenerator.NewUid();\r\n this._isRecurringMaster = false;\r\n this._isNoEndDate = false;\r\n this._occurrences = [];\r\n this._itemId = \"\";\r\n this._globalId = \"\";\r\n this._originalStart = \"\";\r\n this._originalEnd = \"\";\r\n this._recurringAppDuration = \"\";\r\n // this._applicationSettingsService = container.resolve(TokenIApplicationSettingsService);\r\n this._haveOrder = false;\r\n this._haveNormalOrder = false;\r\n this._start = new Date();\r\n this._end = new Date();\r\n this._isReOpenAfterSent = false;\r\n this.IsReOpen = false;\r\n }\r\n\r\n public set OrganizerEmail(organizerEmail: string | undefined) {\r\n if (organizerEmail) {\r\n this._organizerEmail = organizerEmail.toLowerCase();\r\n }\r\n }\r\n\r\n public get OrganizerEmail() {\r\n return this._organizerEmail;\r\n }\r\n\r\n private _setOptionalRecipients(recipients: Array) {\r\n this._emptyOptionalRecipients();\r\n if (recipients != null && recipients.length > 0) {\r\n recipients.forEach((rpt) => {\r\n this._pushOptionalRecipients(rpt);\r\n });\r\n }\r\n }\r\n private _setRequiredRecipients(recipients: Array) {\r\n this._emptyRequiredRecipients();\r\n if (recipients != null && recipients.length > 0) {\r\n recipients.forEach((rpt) => {\r\n this._pushRequiredRecipients(rpt);\r\n });\r\n }\r\n }\r\n\r\n private _pushRequiredRecipients(recipient: OutlookRecipient) {\r\n // ignore organizer\r\n if (\r\n recipient.Email &&\r\n recipient.Email !== \"\" &&\r\n !this._requiredRecipientsMap[recipient.Email]\r\n && recipient.Email.toLowerCase() != this._organizerEmail?.toLowerCase()\r\n ) {\r\n recipient.RecipientType = OutlookRecipientTypeEnum.Required;\r\n this._requiredRecipientsMap[recipient.Email] = recipient;\r\n this._requiredRecipients.push(recipient);\r\n }\r\n }\r\n private _pushResources(recipient: OutlookRecipient) {\r\n // ignore organizer\r\n if (\r\n recipient.Email &&\r\n recipient.Email !== \"\" &&\r\n !this._resourcesMap[recipient.Email]\r\n && recipient.Email.toLowerCase() != this._organizerEmail?.toLowerCase()\r\n ) {\r\n recipient.RecipientType = OutlookRecipientTypeEnum.Resources;\r\n this._resourcesMap[recipient.Email] = recipient;\r\n this._resources.push(recipient);\r\n }\r\n }\r\n private _pushOptionalRecipients(recipient: OutlookRecipient) {\r\n if (\r\n recipient.Email &&\r\n recipient.Email !== \"\" &&\r\n !this._optionalRecipientsMap[recipient.Email]\r\n //&& recipient.Email.toLowerCase() != this._organizerEmail?.toLowerCase()\r\n ) {\r\n recipient.RecipientType = OutlookRecipientTypeEnum.Optional;\r\n this._optionalRecipientsMap[recipient.Email] = recipient;\r\n this._optionalRecipients.push(recipient);\r\n }\r\n }\r\n private _emptyRequiredRecipients() {\r\n this._requiredRecipients = [];\r\n this._requiredRecipientsMap = {};\r\n }\r\n private _emptyOptionalRecipients() {\r\n this._optionalRecipients = [];\r\n this._optionalRecipientsMap = {};\r\n }\r\n private _copyRecipients(\r\n recipients: Array\r\n ): OutlookRecipient[] {\r\n return recipients.map((rpt) =>\r\n Object.create(rpt)\r\n );\r\n }\r\n\r\n GetResource(recipient: OutlookRecipient): OutlookRecipient | undefined {\r\n // ignore organizer\r\n if (\r\n recipient.Email &&\r\n recipient.Email !== \"\" &&\r\n this._resourcesMap[recipient.Email]\r\n && recipient.Email.toLowerCase() != this._organizerEmail?.toLowerCase()\r\n ) {\r\n return this._resourcesMap[recipient.Email];\r\n }\r\n return undefined;\r\n }\r\n\r\n UpdateSubject(subject: string): boolean {\r\n let isUpdated = false;\r\n if (this._subject !== subject) {\r\n this._subject = subject;\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n UpdateStartTime(start: Date): boolean {\r\n let isUpdated = false;\r\n let newStartTime = convertToNetTicks(start);\r\n if (newStartTime !== this._startInTicks) {\r\n this._startInTicks = newStartTime;\r\n this._start = start;\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n UpdateEndTime(end: Date) {\r\n let isUpdated = false;\r\n let newEndTime = convertToNetTicks(end);\r\n if (newEndTime !== this._endInTicks) {\r\n this._endInTicks = newEndTime;\r\n this._end = end;\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n AddRecipients(resources: Array): OutlookRecipient[] {\r\n let addedResources: OutlookRecipient[] = [];\r\n let self = this;\r\n if (resources && resources.length > 0) {\r\n resources.forEach((rs) => {\r\n let recipient = new OutlookRecipient(\r\n rs.Email,\r\n rs.Name,\r\n undefined,\r\n rs.ResourceType\r\n );\r\n if (\r\n !self._requiredRecipientsMap[recipient.Email] &&\r\n !self._optionalRecipientsMap[recipient.Email] &&\r\n !self._resourcesMap[recipient.Email]\r\n ) {\r\n if (this._isPlatformSupported()) {\r\n if (recipient.ResourceType == ExchangeResourceTypeEnum.Room) {\r\n self._pushResources(recipient);\r\n }\r\n } else {\r\n self._pushResources(recipient);\r\n }\r\n\r\n addedResources.push(recipient);\r\n }\r\n });\r\n }\r\n return addedResources;\r\n }\r\n\r\n AddRequiredAttendee(\r\n requiredAttendee: Array\r\n ): OutlookRecipient[] {\r\n let addedRequiredAttendees: OutlookRecipient[] = [];\r\n let self = this;\r\n if (requiredAttendee && requiredAttendee.length > 0) {\r\n requiredAttendee.forEach((rs) => {\r\n let recipient = new OutlookRecipient(rs.Email, rs.Name);\r\n if (\r\n !self._requiredRecipientsMap[recipient.Email] &&\r\n !self._optionalRecipientsMap[recipient.Email] &&\r\n !self._resourcesMap[recipient.Email]\r\n ) {\r\n self._pushRequiredRecipients(recipient);\r\n addedRequiredAttendees.push(recipient);\r\n }\r\n });\r\n }\r\n return addedRequiredAttendees;\r\n }\r\n\r\n RemoveRecipients(resourceEmails: Array) {\r\n let self = this;\r\n if (resourceEmails && resourceEmails.length > 0) {\r\n resourceEmails.forEach((email) => {\r\n if (self._requiredRecipientsMap[email]) {\r\n delete self._requiredRecipientsMap[email];\r\n self._requiredRecipients = self._requiredRecipients.filter(\r\n (rs) => rs.Email !== email\r\n );\r\n } else if (self._optionalRecipientsMap[email]) {\r\n delete self._optionalRecipientsMap[email];\r\n self._optionalRecipients = self._optionalRecipients.filter(\r\n (rs) => rs.Email !== email\r\n );\r\n } else if (self._resourcesMap[email]) {\r\n delete self._resourcesMap[email];\r\n self._resources = self._resources.filter((rs) => rs.Email !== email);\r\n }\r\n });\r\n }\r\n }\r\n UpdateRequiredRecipients(\r\n requiredRecipients: Array\r\n ): boolean {\r\n let isUpdated = false;\r\n // add resources from custom properties to required recipients.\r\n let currentRequiredMap: IHash = {};\r\n let currentRequiredRecipients: OutlookRecipient[] = [];\r\n\r\n requiredRecipients.forEach((rs) => {\r\n // ignore organizer when calculate required recipients.\r\n if (rs.Email && rs.Email !== \"\") {\r\n if (rs.Email != this._organizerEmail) {\r\n if (!currentRequiredMap[rs.Email]) {\r\n currentRequiredMap[rs.Email] = rs;\r\n currentRequiredRecipients.push(rs);\r\n }\r\n }\r\n else {\r\n this._organizerInRequiredAttendees = rs;\r\n }\r\n }\r\n });\r\n // delete all resource that no longer exsited in new list.\r\n let deletedRequired = this._requiredRecipients.filter(\r\n (rs) => !currentRequiredMap[rs.Email]\r\n );\r\n if (deletedRequired.length > 0) {\r\n deletedRequired.forEach((deletedRs) => {\r\n delete this._requiredRecipientsMap[deletedRs.Email];\r\n });\r\n isUpdated = true;\r\n }\r\n // keep all resources still existed in new list.\r\n this._requiredRecipients = this._requiredRecipients.filter(\r\n (rs) => currentRequiredMap[rs.Email]\r\n );\r\n // add all resources that added in new list.\r\n let addedRequired: OutlookRecipient[] = [];\r\n if (currentRequiredRecipients != null) {\r\n addedRequired = currentRequiredRecipients.filter(\r\n (rs) => !this._requiredRecipientsMap[rs.Email]\r\n );\r\n }\r\n if (addedRequired.length > 0) {\r\n addedRequired.forEach((addedRs) => {\r\n let recipient = new OutlookRecipient(addedRs.Email, addedRs.Name);\r\n this._pushRequiredRecipients(recipient);\r\n });\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n get OrganizerInRequiredAttendees(): OutlookRecipient | undefined {\r\n return this._organizerInRequiredAttendees;\r\n }\r\n UpdateOptionalAttendees(\r\n optionalRecipients: Array\r\n ): boolean {\r\n let isUpdated = false;\r\n let currentOptionalMap: IHash = {};\r\n let currentOptionalRecipients: OutlookRecipient[] = [];\r\n if (optionalRecipients != null) {\r\n optionalRecipients.forEach((rs) => {\r\n if (!currentOptionalMap[rs.Email]) {\r\n currentOptionalMap[rs.Email] = rs;\r\n currentOptionalRecipients.push(rs);\r\n }\r\n if (rs.Email && rs.Email !== \"\" && rs.Email != this._organizerEmail) {\r\n\r\n }\r\n });\r\n }\r\n // delete all resource that no longer exsited in new list.\r\n let deletedOptional = this._optionalRecipients.filter(\r\n (rs) => !currentOptionalMap[rs.Email]\r\n );\r\n if (deletedOptional.length > 0) {\r\n deletedOptional.forEach((deletedRs) => {\r\n delete this._optionalRecipientsMap[deletedRs.Email];\r\n });\r\n isUpdated = true;\r\n }\r\n // keep all resources still existed in new list.\r\n this._optionalRecipients = this._optionalRecipients.filter(\r\n (rs) => currentOptionalMap[rs.Email]\r\n );\r\n // add all resources that added in new list.\r\n let addedOptional: OutlookRecipient[] = [];\r\n if (currentOptionalRecipients != null) {\r\n addedOptional = currentOptionalRecipients.filter(\r\n (rs) => !this._optionalRecipientsMap[rs.Email]\r\n );\r\n }\r\n if (addedOptional.length > 0) {\r\n addedOptional.forEach((addedRs) => {\r\n let recipient = new OutlookRecipient(addedRs.Email, addedRs.Name);\r\n this._optionalRecipients.push(recipient);\r\n this._optionalRecipientsMap[recipient.Email] = recipient;\r\n });\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n public UpdateRecipients(recipients: OutlookRecipientDto[]): boolean {\r\n let isUpdated = false;\r\n let requiredRecipients: OutlookRecipient[] = [];\r\n let optionalRecipients: OutlookRecipient[] = [];\r\n let newRecipientsMap: IHash = {};\r\n if (recipients != null && recipients.length > 0) {\r\n recipients.forEach((dto) => {\r\n if (dto.Email && dto.Email !== \"\") {\r\n let recipientType = dto.RecipientType ? dto.RecipientType : 0;\r\n let olRecipient = new OutlookRecipient(\r\n dto.Email,\r\n dto.Name,\r\n recipientType\r\n );\r\n if (this._isOptionalRecipients(dto.Email)) {\r\n if (dto.Name == null) {\r\n let oldAttendee = this._optionalRecipientsMap[dto.Email];\r\n dto.Name = oldAttendee.Name;\r\n }\r\n optionalRecipients.push(olRecipient);\r\n } else {\r\n let oldAttendee = this._requiredRecipientsMap[dto.Email];\r\n if (oldAttendee) {\r\n if (!olRecipient.Name || olRecipient.Name === \"\") {\r\n if (!dto.Name) {\r\n olRecipient.Name = oldAttendee.Name;\r\n }\r\n }\r\n } else {\r\n isUpdated = true;\r\n }\r\n requiredRecipients.push(olRecipient);\r\n }\r\n newRecipientsMap[olRecipient.Email] = olRecipient;\r\n }\r\n });\r\n }\r\n let isOptionalRemoved = this._optionalRecipients.some(\r\n (r) => !newRecipientsMap[r.Email]\r\n );\r\n let isRequiredRemoved = this._requiredRecipients.some(\r\n (r) => !newRecipientsMap[r.Email]\r\n );\r\n if (!isUpdated) {\r\n isUpdated = isOptionalRemoved || isRequiredRemoved;\r\n }\r\n this._setOptionalRecipients(optionalRecipients);\r\n this._setRequiredRecipients(requiredRecipients);\r\n return isUpdated;\r\n }\r\n private _concatResourcesFromCustomProperties(\r\n recipients: Array\r\n ) {\r\n let fullRecipients: OutlookRecipient[] = [];\r\n if (!recipients) return fullRecipients;\r\n fullRecipients = fullRecipients.concat(recipients);\r\n if (this._resources) {\r\n fullRecipients = fullRecipients.concat(this._resources);\r\n }\r\n return fullRecipients;\r\n }\r\n public UpdateResources(resources: Array): boolean {\r\n let isUpdated = false;\r\n // add resources from custom properties to required recipients.\r\n let newResourceMap: IHash = {};\r\n let currentResources: OutlookRecipient[] = [];\r\n if (resources != null) {\r\n resources.forEach((rs) => {\r\n // ignore organizer when calculate required recipients.\r\n if (rs.Email && rs.Email !== \"\" && rs.Email != this._organizerEmail) {\r\n if (!newResourceMap[rs.Email]) {\r\n newResourceMap[rs.Email] = rs;\r\n currentResources.push(rs);\r\n }\r\n }\r\n });\r\n }\r\n // delete all resource that no longer exsited in new list.\r\n let deletedResources = this._resources.filter(\r\n (rs) => !newResourceMap[rs.Email]\r\n );\r\n if (deletedResources.length > 0) {\r\n deletedResources.forEach((deletedRs) => {\r\n delete this._resourcesMap[deletedRs.Email];\r\n });\r\n isUpdated = true;\r\n }\r\n // keep all resources still existed in new list.\r\n this._resources = this._resources.filter((rs) => newResourceMap[rs.Email]);\r\n // add all resources that added in new list.\r\n let addedResources: OutlookRecipient[] = [];\r\n if (currentResources != null) {\r\n addedResources = currentResources.filter(\r\n (rs) => !this._resourcesMap[rs.Email]\r\n );\r\n }\r\n if (addedResources.length > 0) {\r\n addedResources.forEach((addedRs) => {\r\n let recipient = new OutlookRecipient(addedRs.Email, addedRs.Name);\r\n this._pushResources(recipient);\r\n });\r\n isUpdated = true;\r\n }\r\n return isUpdated;\r\n }\r\n private _isOptionalRecipients(email: string): boolean {\r\n return this._optionalRecipientsMap[email] != null;\r\n }\r\n\r\n Export(): OutlookAppointmentDto {\r\n let dto: OutlookAppointmentDto =\r\n {\r\n Uid: this._uid,\r\n StartTimeTicks: this._startInTicks,\r\n EndTimeTicks: this._endInTicks,\r\n StartTime: this._start,\r\n EndTime: this._end,\r\n Subject: this._subject,\r\n SessionId: this._sessionId,\r\n Guid: this._guid,\r\n GlobalId: this._globalId,\r\n IsRecurringMaster: this._isRecurringMaster,\r\n IsNoEndDate: this._isNoEndDate,\r\n Occurrences: this.Occurrences,\r\n ItemId: this._itemId,\r\n IsOccurence: this._isOccurence,\r\n RecurringAppDuration: this._recurringAppDuration,\r\n OriginalEnd: this._originalEnd,\r\n OriginalStart: this._originalStart,\r\n HaveOrder: this._haveOrder,\r\n HaveNormalOrder: this._haveNormalOrder,\r\n IsReopenAfterSent: this._isReOpenAfterSent,\r\n IsReOpen: this.IsReOpen\r\n } as OutlookAppointmentDto\r\n return dto;\r\n }\r\n IsNewBooking(): boolean {\r\n return this._globalId == null || this._globalId == \"\";\r\n }\r\n ExportRecipients(): OutlookRecipientDto[] {\r\n let resourceDtos = this.Recipients.map((rs) => {\r\n let rsDto: OutlookRecipientDto =\r\n {\r\n Email: rs.Email,\r\n Name: rs.Name,\r\n RecipientType: rs.RecipientType\r\n }\r\n return rsDto;\r\n });\r\n return resourceDtos;\r\n }\r\n\r\n private _isPlatformSupported(): boolean {\r\n return Office.context.requirements.isSetSupported(\r\n \"Mailbox\",\r\n this._minVersionPlatform\r\n );\r\n }\r\n\r\n public get IsPlatformSupported(): boolean {\r\n return this._isPlatformSupported();\r\n }\r\n}\r\n","// flag to lock the appointment object when process update.\r\nexport class OutlookAppointmentLocker {\r\n DateTime: boolean;\r\n Subject: boolean;\r\n RequiredRecipients: boolean;\r\n OptionalRecipients: boolean;\r\n constructor() {\r\n this.DateTime = false;\r\n this.Subject = false;\r\n this.RequiredRecipients = false;\r\n this.OptionalRecipients = false;\r\n }\r\n}","export class OutlookAppointmentStartedFlag {\r\n StartTime: boolean;\r\n EndTime: boolean;\r\n Subject: boolean;\r\n RequiredRecipients: boolean;\r\n OptionalRecipients: boolean;\r\n CustomProperties: boolean;\r\n Resources: boolean;\r\n Recurrence: boolean;\r\n public constructor() {\r\n this.StartTime = false;\r\n this.EndTime = false;\r\n this.Subject = false;\r\n this.RequiredRecipients = false;\r\n this.OptionalRecipients = false;\r\n this.CustomProperties = false;\r\n this.Resources = false;\r\n this.Recurrence = false;\r\n }\r\n get IsStarted(): boolean {\r\n return this.StartTime\r\n && this.EndTime\r\n && this.RequiredRecipients\r\n && this.OptionalRecipients\r\n && this.Subject\r\n && this.CustomProperties\r\n && this.Resources\r\n && this.Recurrence;\r\n }\r\n}","export class OutlookAppointmentWatchingFlag {\r\n EnableWatchTime: boolean;\r\n EnableWatchRecipients: boolean;\r\n EnableWatchSubject: boolean;\r\n EnableWatchEnhancedLocations: boolean;\r\n constructor() {\r\n this.EnableWatchTime = true;\r\n this.EnableWatchRecipients = true;\r\n // in requirement set 1.7, subject changed event is not support, so we need watch subject manually.\r\n this.EnableWatchSubject = true; \r\n this.EnableWatchEnhancedLocations = false; \r\n }\r\n get EnableWatching(): boolean {\r\n return this.EnableWatchTime\r\n || this.EnableWatchRecipients\r\n || this.EnableWatchSubject; \r\n }\r\n}","import { ExchangeResourceTypeEnum, OutlookRecipientTypeEnum } from \"booking-app-op\";\r\n\r\nexport class OutlookRecipient {\r\n private _email: string;\r\n private _resourceType: ExchangeResourceTypeEnum;\r\n public RecipientType: OutlookRecipientTypeEnum;\r\n public set Email(email: string) {\r\n this._email = email;\r\n }\r\n public get Email(): string {\r\n return this._email;\r\n }\r\n public set ResourceType(resourceType: ExchangeResourceTypeEnum) {\r\n this._resourceType = resourceType;\r\n }\r\n public get ResourceType(): ExchangeResourceTypeEnum {\r\n return this._resourceType;\r\n }\r\n public Name: string;\r\n public constructor(\r\n email: string,\r\n name: string,\r\n recipientType?: OutlookRecipientTypeEnum,\r\n resourceType?: ExchangeResourceTypeEnum\r\n ) {\r\n this._email = email.toLowerCase();\r\n if (name != null && name != \"\") {\r\n this.Name = name;\r\n } else {\r\n this.Name = this._email;\r\n }\r\n if (recipientType) {\r\n this.RecipientType = recipientType;\r\n } else {\r\n this.RecipientType = OutlookRecipientTypeEnum.Required;\r\n }\r\n if (resourceType) {\r\n this._resourceType = resourceType;\r\n } else {\r\n this._resourceType = ExchangeResourceTypeEnum.Room;\r\n }\r\n }\r\n}\r\n","import { WebAddinPlatforms ,ConvertUtils} from \"booking-app-op\";\r\n\r\nexport class PlatformHelper {\r\n public static GetCurrentPlatform(): WebAddinPlatforms {\r\n if (Office.context.diagnostics) {\r\n let currentPlatforms = Office.context.diagnostics;\r\n if (currentPlatforms.host === Office.HostType.Outlook) {\r\n if (currentPlatforms.platform === Office.PlatformType.Mac) {\r\n return WebAddinPlatforms.OutlookForMac;\r\n }\r\n else {\r\n if (currentPlatforms.platform === Office.PlatformType.PC) {\r\n let version = currentPlatforms.version;\r\n let versionArr = version.split('.');\r\n if (ConvertUtils.ToInt(versionArr[0]) === 16) {\r\n return WebAddinPlatforms.Outlook2016;\r\n }\r\n return WebAddinPlatforms.DesktopClient;\r\n }\r\n if (currentPlatforms.platform === Office.PlatformType.OfficeOnline) {\r\n return WebAddinPlatforms.OWA;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n let currentPlatforms = Office.context.mailbox.diagnostics;\r\n if (currentPlatforms) {\r\n let version = currentPlatforms.hostVersion;\r\n let versionArr = version.split('.');\r\n if (ConvertUtils.ToInt(versionArr[0]) === 16) {\r\n return WebAddinPlatforms.Outlook2016;\r\n }\r\n }\r\n }\r\n return WebAddinPlatforms?.undefined;\r\n }\r\n\r\n public static IsOnPremSystem() {\r\n return Office.context.mailbox.userProfile.accountType == \"enterprise\";\r\n }\r\n\r\n public static GetSpecificVersion(): number {\r\n let _isStopCheck = false;\r\n let baseVersion = 9;\r\n while (!_isStopCheck) {\r\n if (Office.context.requirements.isSetSupported('Mailbox', '1.' + baseVersion.toString()) || baseVersion == 0) {\r\n _isStopCheck = true;\r\n }\r\n baseVersion--;\r\n }\r\n return baseVersion;\r\n }\r\n\r\n public static GetRunningPlatform(): Office.PlatformType {\r\n if (Office.context.diagnostics) {\r\n return Office.context.diagnostics.platform;\r\n }\r\n else {\r\n return Office.PlatformType.PC;\r\n }\r\n }\r\n\r\n public static GetPlatformString(): string {\r\n if (Office.context.diagnostics) {\r\n let currentPlatforms = Office.context.diagnostics;\r\n if (currentPlatforms.host === Office.HostType.Outlook) {\r\n if (currentPlatforms.platform === Office.PlatformType.Mac) {\r\n return \"OutlookForMac\";\r\n }\r\n else {\r\n if (currentPlatforms.platform === Office.PlatformType.PC) {\r\n return \"OutlookBuild \" + currentPlatforms.version;\r\n }\r\n if (currentPlatforms.platform === Office.PlatformType.OfficeOnline) {\r\n return \"OfficeOnline\";\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n let currentPlatforms = Office.context.mailbox.diagnostics;\r\n if (currentPlatforms) {\r\n return \"OutlookBuild \" + currentPlatforms.hostVersion;\r\n }\r\n }\r\n return \"Unknown\";\r\n }\r\n}","import {\r\n addDates,\r\n addMinutes,\r\n addMonths,\r\n addWeeks,\r\n addYears,\r\n CloneDateTime,\r\n CloneDateTimeFromSeparateSource,\r\n convertToNetTicks,\r\n DateTimePeriodDto,\r\n IPlatformService,\r\n // ITimeZoneHelperService,\r\n StringToDate,\r\n StringToTime,\r\n TokenIPlatformService,\r\n WebAddinPlatforms,\r\n // TokenITimeZoneHelperService,\r\n} from \"booking-app-op\";\r\nimport { container } from \"tsyringe\";\r\n\r\ninterface DateTimePeriod {\r\n Start: Date;\r\n End: Date;\r\n}\r\nexport class RecurringHelper {\r\n static async GetRecurringDates(\r\n recurrencePattern: Office.Recurrence,\r\n noEndOccurrences: number,\r\n newStartTime?: Date\r\n ): Promise> {\r\n const recurringOccs: DateTimePeriodDto[] = [];\r\n // get first occ from start time.\r\n let occurrence = this.CalculateFirstOccurrence(recurrencePattern, newStartTime);\r\n let endDate: Date | null = null;\r\n const endDateStr = recurrencePattern.seriesTime.getEndDate();\r\n let maxNumberOfOccs = 0;\r\n if (endDateStr == null) {\r\n maxNumberOfOccs = noEndOccurrences;\r\n } else {\r\n endDate = StringToDate(endDateStr);\r\n endDate = addDates(endDate, 1);\r\n }\r\n while (\r\n (occurrence && endDate && occurrence.Start < endDate) ||\r\n (maxNumberOfOccs > 0 && recurringOccs.length < maxNumberOfOccs)\r\n ) {\r\n recurringOccs.push({\r\n StartTicks: convertToNetTicks(occurrence?.Start),\r\n EndTicks: convertToNetTicks(occurrence?.End),\r\n Start: occurrence?.Start,\r\n End: occurrence?.End,\r\n StartInOrgTz: occurrence?.Start,\r\n EndInOrgTz: occurrence?.End,\r\n });\r\n occurrence = occurrence && this.GetNextOccurrence(recurrencePattern, occurrence);\r\n //console.log(\"occurrence\", occurrence)\r\n }\r\n\r\n const platformService: IPlatformService = container.resolve(TokenIPlatformService);\r\n if(recurrencePattern.recurrenceType === Office.MailboxEnums.RecurrenceType.Weekly && (platformService.GetCurrentPlatform() === WebAddinPlatforms.OWA || platformService.GetCurrentPlatform() === WebAddinPlatforms.DesktopClient)) {\r\n const dayOfWeekNumber: number[] = [];\r\n const propertiesDayOfWeek = recurrencePattern.recurrenceProperties.dayOfWeek ? [recurrencePattern.recurrenceProperties.dayOfWeek] : recurrencePattern.recurrenceProperties.days\r\n for (let i = 0; i < propertiesDayOfWeek.length; i++) {\r\n let dayOfweek: Office.MailboxEnums.Days = this.MapDaysOfWeekString(propertiesDayOfWeek[i]);\r\n let daysOfWeekInNumber = this.MapDaysOfWeekToNumber(dayOfweek);\r\n dayOfWeekNumber.push(daysOfWeekInNumber)\r\n }\r\n if(recurringOccs[0]) {\r\n let firstOccDay = recurringOccs[0].Start.getDay();\r\n if(dayOfWeekNumber.length && !dayOfWeekNumber.includes(firstOccDay)) {\r\n recurringOccs[0].IsDeleted = true;\r\n }\r\n }\r\n }\r\n // let timeZoneHelperService: ITimeZoneHelperService = container.resolve(TokenITimeZoneHelperService);\r\n // let timeToConvert: number[] = [];\r\n // recurringOccs.forEach((i) => {\r\n // timeToConvert.push(i.StartTicks);\r\n // timeToConvert.push(i.EndTicks);\r\n // });\r\n // let convertedDatetime = await timeZoneHelperService.ConvertDateTimes({\r\n // DateTimeTicksToConvert: timeToConvert,\r\n // OriginalTimeZone: organizerTimeZone,\r\n // ClientTimeZone: clientTimeZone,\r\n // TargetTimeZone: clientTimeZone,\r\n // });\r\n // if (convertedDatetime) {\r\n // recurringOccs.forEach((i) => {\r\n // let convertedStart = convertedDatetime[i.StartTicks];\r\n // if (convertedStart) {\r\n // i.Start = convertedStart.ConvertedDateTime;\r\n // i.StartTicks = convertToNetTicks(convertedStart.ConvertedDateTime);\r\n // }\r\n // let convertedEnd = convertedDatetime[i.EndTicks];\r\n // if (convertedEnd) {\r\n // i.End = convertedEnd.ConvertedDateTime;\r\n // i.EndTicks = convertToNetTicks(convertedEnd.ConvertedDateTime);\r\n // }\r\n // });\r\n // }\r\n return recurringOccs;\r\n }\r\n private static CalculateFirstOccurrence(pattern: Office.Recurrence, newStartTime?: Date): DateTimePeriod | undefined {\r\n let firstOcc: DateTimePeriod | undefined;\r\n let seriesTime = pattern.seriesTime;\r\n if (seriesTime) {\r\n let startDate = StringToDate(seriesTime.getStartDate());\r\n let startTime = StringToTime(seriesTime.getStartTime());\r\n let duration = seriesTime.getDuration();\r\n let startDateTime = new Date(\r\n startDate.getFullYear(),\r\n startDate.getMonth(),\r\n startDate.getDate(),\r\n newStartTime ? newStartTime.getHours() : startTime.getHours(),\r\n newStartTime ? newStartTime.getMinutes() : startTime.getMinutes(),\r\n newStartTime ? newStartTime.getSeconds() :startTime.getSeconds()\r\n );\r\n let endDateTime = addMinutes(startDateTime, duration);\r\n firstOcc = {\r\n Start: startDateTime,\r\n End: endDateTime,\r\n };\r\n }\r\n return firstOcc;\r\n }\r\n private static GetNextOccurrence(pattern: Office.Recurrence, prevOcc: DateTimePeriod) {\r\n let occDaysOfNextMonth;\r\n let nextOcc: DateTimePeriod | undefined;\r\n let properties = pattern.recurrenceProperties;\r\n switch (pattern.recurrenceType) {\r\n case Office.MailboxEnums.RecurrenceType.Daily:\r\n if (properties?.interval && prevOcc?.Start && prevOcc?.End) {\r\n nextOcc = {\r\n Start: addDates(prevOcc.Start, properties.interval),\r\n End: addDates(prevOcc.End, properties.interval),\r\n };\r\n }\r\n break;\r\n case Office.MailboxEnums.RecurrenceType.Weekday:\r\n let olDaysOfWeekEnum = Office.MailboxEnums.Days;\r\n let daysOfWeek = olDaysOfWeekEnum.Sun;\r\n nextOcc = {\r\n Start: CloneDateTime(prevOcc.Start),\r\n End: CloneDateTime(prevOcc.End),\r\n };\r\n do {\r\n if (nextOcc?.Start && nextOcc?.End) {\r\n nextOcc = {\r\n Start: addDates(nextOcc.Start, 1),\r\n End: addDates(nextOcc.End, 1),\r\n };\r\n }\r\n daysOfWeek = this.MapDaysOfWeek(nextOcc.Start.getDay());\r\n } while (\r\n // get the next day if the current day is in sunday or saturday.\r\n daysOfWeek === olDaysOfWeekEnum.Sun ||\r\n daysOfWeek === olDaysOfWeekEnum.Sat\r\n );\r\n break;\r\n case Office.MailboxEnums.RecurrenceType.Weekly:\r\n const prevDaysOfWeek = prevOcc.Start.getDay();\r\n let minDaysOfWeek = 6;\r\n let nextOccDays = 6;\r\n let maxDaysOfWeek = 0;\r\n if (properties?.days && properties.days.length > 0) {\r\n for (let i = 0; i < properties.days.length; i++) {\r\n let dayOfweek: Office.MailboxEnums.Days = this.MapDaysOfWeekString(properties.days[i]);\r\n let daysOfWeekInNumber = this.MapDaysOfWeekToNumber(dayOfweek);\r\n if (daysOfWeekInNumber < minDaysOfWeek) {\r\n minDaysOfWeek = daysOfWeekInNumber;\r\n }\r\n if (daysOfWeekInNumber > prevDaysOfWeek) {\r\n if (daysOfWeekInNumber < nextOccDays) {\r\n nextOccDays = daysOfWeekInNumber;\r\n }\r\n }\r\n if (daysOfWeekInNumber > maxDaysOfWeek) {\r\n maxDaysOfWeek = daysOfWeekInNumber;\r\n }\r\n }\r\n //properties.days.forEach((day) => {\r\n // let dayOfweek: Office.MailboxEnums.Days = (Office.MailboxEnums.Days)[day];\r\n // var daysOfWeekInNumber = this.MapDaysOfWeekToNumber(dayOfweek);\r\n // if (daysOfWeekInNumber < minDaysOfWeek) {\r\n // minDaysOfWeek = daysOfWeekInNumber;\r\n // }\r\n // if (daysOfWeekInNumber > prevDaysOfWeek) {\r\n // if (daysOfWeekInNumber < nextOccDays) {\r\n // nextOccDays = daysOfWeekInNumber;\r\n // }\r\n // }\r\n // if (daysOfWeekInNumber > maxDaysOfWeek) {\r\n // maxDaysOfWeek = daysOfWeekInNumber;\r\n // }\r\n //});\r\n }\r\n if (prevDaysOfWeek === maxDaysOfWeek) {\r\n // if the prev occur is the last occ of this week, add the interval to move the next recurring weeks.\r\n const nextRecurringWeek = addWeeks(prevOcc.Start, properties?.interval || 1);\r\n const nextOccDaysOfWeek = addDates(nextRecurringWeek, minDaysOfWeek - prevDaysOfWeek);\r\n nextOcc = {\r\n Start: CloneDateTimeFromSeparateSource(nextOccDaysOfWeek, prevOcc.Start),\r\n End: CloneDateTimeFromSeparateSource(nextOccDaysOfWeek, prevOcc.End),\r\n };\r\n } else {\r\n nextOcc = {\r\n Start: addDates(prevOcc.Start, nextOccDays - prevDaysOfWeek || 1),\r\n End: addDates(prevOcc.End, nextOccDays - prevDaysOfWeek || 1),\r\n };\r\n }\r\n break;\r\n case Office.MailboxEnums.RecurrenceType.Monthly:\r\n if (typeof properties?.dayOfMonth !== \"undefined\") {\r\n // case has the specific days of month\r\n nextOcc = {\r\n Start: addMonths(prevOcc.Start, properties.interval || 1),\r\n End: addMonths(prevOcc.End, properties.interval || 1),\r\n };\r\n } else if (properties?.interval !== undefined) {\r\n // case use week days\r\n const nextMonthRepDays = addMonths(prevOcc.Start, properties.interval || 1);\r\n const firstDaysInNextMonth = new Date(\r\n nextMonthRepDays.getFullYear(),\r\n nextMonthRepDays.getMonth(),\r\n 1,\r\n nextMonthRepDays.getHours(),\r\n nextMonthRepDays.getMinutes(),\r\n nextMonthRepDays.getSeconds()\r\n );\r\n occDaysOfNextMonth = this.GetOccDaysOfMonth(firstDaysInNextMonth, pattern);\r\n nextOcc = {\r\n Start: CloneDateTimeFromSeparateSource(occDaysOfNextMonth, prevOcc.Start),\r\n End: CloneDateTimeFromSeparateSource(occDaysOfNextMonth, prevOcc.End),\r\n };\r\n }\r\n break;\r\n case Office.MailboxEnums.RecurrenceType.Yearly:\r\n if (typeof properties?.dayOfMonth !== \"undefined\") {\r\n // case has the specific days and month year.\r\n nextOcc = {\r\n Start: addYears(prevOcc.Start, properties.interval || 1),\r\n End: addYears(prevOcc.End, properties.interval || 1),\r\n };\r\n } else if (properties?.interval !== undefined) {\r\n const nextOccYear = addYears(prevOcc.Start, properties.interval || 1);\r\n const firstDayOfNextOccMonth = new Date(\r\n nextOccYear.getFullYear(),\r\n nextOccYear.getMonth(),\r\n 1,\r\n nextOccYear.getHours(),\r\n nextOccYear.getMinutes(),\r\n nextOccYear.getSeconds()\r\n );\r\n occDaysOfNextMonth = this.GetOccDaysOfMonth(firstDayOfNextOccMonth, pattern);\r\n nextOcc = {\r\n Start: CloneDateTimeFromSeparateSource(occDaysOfNextMonth, prevOcc.Start),\r\n End: CloneDateTimeFromSeparateSource(occDaysOfNextMonth, prevOcc.End),\r\n };\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return nextOcc;\r\n }\r\n private static GetOccDaysOfMonth(firstDaysOfMonth: Date, pattern: Office.Recurrence): Date {\r\n let properties = pattern.recurrenceProperties;\r\n let occDaysOfWeeks: Office.MailboxEnums.Days | undefined = properties?.dayOfWeek\r\n ? this.MapDaysOfWeekString(properties.dayOfWeek)\r\n : undefined;\r\n const occDaysOfWeeksInNumber = occDaysOfWeeks ? this.MapDaysOfWeekToNumber(occDaysOfWeeks) : undefined;\r\n let olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber;\r\n\r\n let occDaysOfMonth = new Date();\r\n let occDateInFirstWeek = new Date();\r\n const firstDaysInNextMonthDaysOfWeek = firstDaysOfMonth.getDay();\r\n if (occDaysOfWeeksInNumber) {\r\n if (firstDaysInNextMonthDaysOfWeek <= occDaysOfWeeksInNumber) {\r\n occDateInFirstWeek = addDates(firstDaysOfMonth, occDaysOfWeeksInNumber - firstDaysInNextMonthDaysOfWeek);\r\n } else {\r\n occDateInFirstWeek = addDates(\r\n addWeeks(firstDaysOfMonth, 1),\r\n occDaysOfWeeksInNumber - firstDaysInNextMonthDaysOfWeek\r\n );\r\n }\r\n }\r\n if ((properties?.weekNumber as Office.MailboxEnums.WeekNumber) === olWeekNumberTypeEnum.Last) {\r\n let lastOccDateInMonth = addWeeks(occDateInFirstWeek, 4);\r\n if (lastOccDateInMonth.getMonth() != firstDaysOfMonth.getMonth()) {\r\n // case this month only has 4 occurrences week days.\r\n lastOccDateInMonth = addWeeks(occDateInFirstWeek, 3);\r\n }\r\n occDaysOfMonth = lastOccDateInMonth;\r\n } else if (properties?.weekNumber) {\r\n let occWeekNumber: Office.MailboxEnums.WeekNumber = this.MapWeekNumberByString(properties.weekNumber);\r\n const weeksInMonthNumber = this.MapWeekNumber(occWeekNumber);\r\n occDaysOfMonth = addWeeks(occDateInFirstWeek, weeksInMonthNumber - 1);\r\n }\r\n return occDaysOfMonth;\r\n }\r\n\r\n private static MapDaysOfWeekString(dayOfWeek: string): Office.MailboxEnums.Days {\r\n let olDaysOfWeek = Office.MailboxEnums.Days.Sun;\r\n switch (dayOfWeek) {\r\n case \"sun\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Sun;\r\n break;\r\n case \"mon\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Mon;\r\n break;\r\n case \"tue\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Tue;\r\n break;\r\n case \"wed\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Wed;\r\n break;\r\n case \"thu\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Thu;\r\n break;\r\n case \"fri\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Fri;\r\n break;\r\n case \"sat\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Sat;\r\n break;\r\n case \"weekday\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Weekday;\r\n break;\r\n case \"weekendDay\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.WeekendDay;\r\n break;\r\n case \"day\":\r\n olDaysOfWeek = Office.MailboxEnums.Days.Day;\r\n break;\r\n }\r\n return olDaysOfWeek;\r\n }\r\n\r\n private static MapDaysOfWeek(dayOfWeek: number): Office.MailboxEnums.Days {\r\n let olDaysOfWeekEnum = Office.MailboxEnums.Days;\r\n let olDaysOfWeek = olDaysOfWeekEnum.Sun;\r\n switch (dayOfWeek) {\r\n case 0:\r\n olDaysOfWeek = olDaysOfWeekEnum.Sun;\r\n break;\r\n case 1:\r\n olDaysOfWeek = olDaysOfWeekEnum.Mon;\r\n break;\r\n case 2:\r\n olDaysOfWeek = olDaysOfWeekEnum.Tue;\r\n break;\r\n case 3:\r\n olDaysOfWeek = olDaysOfWeekEnum.Wed;\r\n break;\r\n case 4:\r\n olDaysOfWeek = olDaysOfWeekEnum.Thu;\r\n break;\r\n case 5:\r\n olDaysOfWeek = olDaysOfWeekEnum.Fri;\r\n break;\r\n case 6:\r\n olDaysOfWeek = olDaysOfWeekEnum.Sat;\r\n break;\r\n }\r\n return olDaysOfWeek;\r\n }\r\n\r\n private static MapDaysOfWeekToNumber(dayOfWeek: Office.MailboxEnums.Days): number {\r\n let olDaysOfWeekEnum = Office.MailboxEnums.Days;\r\n let daysOfWeekInNumber = 0;\r\n switch (dayOfWeek) {\r\n case olDaysOfWeekEnum.Sun:\r\n daysOfWeekInNumber = 0;\r\n break;\r\n case olDaysOfWeekEnum.Mon:\r\n daysOfWeekInNumber = 1;\r\n break;\r\n case olDaysOfWeekEnum.Tue:\r\n daysOfWeekInNumber = 2;\r\n break;\r\n case olDaysOfWeekEnum.Wed:\r\n daysOfWeekInNumber = 3;\r\n break;\r\n case olDaysOfWeekEnum.Thu:\r\n daysOfWeekInNumber = 4;\r\n break;\r\n case olDaysOfWeekEnum.Fri:\r\n daysOfWeekInNumber = 5;\r\n break;\r\n case olDaysOfWeekEnum.Sat:\r\n daysOfWeekInNumber = 6;\r\n break;\r\n }\r\n return daysOfWeekInNumber;\r\n }\r\n\r\n private static MapWeekNumberByString(weekNumber: string): Office.MailboxEnums.WeekNumber {\r\n let olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.First;\r\n switch (weekNumber) {\r\n case \"first\":\r\n olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.First;\r\n break;\r\n case \"second\":\r\n olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.Second;\r\n break;\r\n case \"third\":\r\n olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.Third;\r\n break;\r\n case \"fourth\":\r\n olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.Fourth;\r\n break;\r\n default:\r\n olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber.Last;\r\n break;\r\n }\r\n return olWeekNumberTypeEnum;\r\n }\r\n\r\n private static MapWeekNumber(weekNumberEnum: Office.MailboxEnums.WeekNumber): number {\r\n let olWeekNumberTypeEnum = Office.MailboxEnums.WeekNumber;\r\n let weekNumber = 1;\r\n switch (weekNumberEnum) {\r\n case olWeekNumberTypeEnum.Second:\r\n weekNumber = 2;\r\n break;\r\n case olWeekNumberTypeEnum.Third:\r\n weekNumber = 3;\r\n break;\r\n case olWeekNumberTypeEnum.Fourth:\r\n weekNumber = 4;\r\n break;\r\n case olWeekNumberTypeEnum.First:\r\n case olWeekNumberTypeEnum.Last:\r\n default:\r\n weekNumber = 1;\r\n break;\r\n }\r\n return weekNumber;\r\n }\r\n}\r\n","export * from \"./OutlookAppointment\"\r\nexport * from \"./OutlookRecipient\"\r\nexport * from \"./OutlookOrganizer\"\r\nexport * from \"./OutlookAppointmentStartedFlag\"\r\nexport * from \"./OutlookAppointmentLocker\"\r\nexport * from \"./DateTimePeriod\"\r\nexport * from \"./OutlookAppointmentWatchingFlag\"\r\nexport * from \"./AppointmentModel\"\r\nexport * from \"./PlatformHelper\"\r\n","import { DependencyContainer, Lifecycle } from \"tsyringe\";\r\n\r\nimport {\r\n IAppointmentManager,\r\n IAuthenticationService,\r\n IDialogService,\r\n IVrService,\r\n TokenIVrService,\r\n IOutlookOrganizerRepository,\r\n IOutlookSettingsRepository,\r\n IPlatformService,\r\n RegisterRFServices,\r\n TokenIAppointmentManager,\r\n TokenIAuthenticationService,\r\n TokenIDialogService,\r\n TokenIOutlookOrganizerRepository,\r\n TokenIOutlookSettingsRepository,\r\n TokenIPlatformService,\r\n} from \"booking-app-op\";\r\nimport { AuthenticationService } from \"../authentication\";\r\nimport { OutlookAppointmentManager, PlatformService } from \"../infrastructures/implementations\";\r\nimport { OutlookOrganizerRepository, OutlookSettingsRepository } from \"../repositories\";\r\nimport { VrService } from \"../infrastructures/implementations/VrService\";\r\nimport { DialogService } from \"../infrastructures/implementations/DialogService\";\r\nimport { INestedAppAuthenticationService, TokenINestedAppAuthenticationService } from \"../authentication/INestedAppAuthenticationService\";\r\nimport { NestedAppAuthenticationService } from \"../authentication/NestedAppAuthenticationService\";\r\n\r\nexport const RegisterOfficeServices = (container: DependencyContainer) => {\r\n //Service BookingApp\r\n RegisterRFServices(container);\r\n\r\n container.register(\r\n TokenIAuthenticationService,\r\n { useClass: AuthenticationService },\r\n { lifecycle: Lifecycle.Singleton }\r\n );\r\n container.register(\r\n TokenIAppointmentManager,\r\n { useClass: OutlookAppointmentManager },\r\n { lifecycle: Lifecycle.Singleton }\r\n );\r\n container.register(TokenIOutlookOrganizerRepository, {\r\n useClass: OutlookOrganizerRepository,\r\n });\r\n container.register(TokenIOutlookSettingsRepository, {\r\n useClass: OutlookSettingsRepository,\r\n });\r\n container.register(TokenIPlatformService, {\r\n useClass: PlatformService,\r\n });\r\n container.register(TokenIVrService, { useClass: VrService }, { lifecycle: Lifecycle.Singleton });\r\n container.register(\r\n TokenIDialogService,\r\n { useClass: DialogService },\r\n { lifecycle: Lifecycle.Singleton }\r\n );\r\n container.register(TokenINestedAppAuthenticationService, { useClass: NestedAppAuthenticationService }, { lifecycle: Lifecycle.Singleton });\r\n\r\n // container.register(\r\n // TokenIResourceManager,\r\n // { useClass: ResourceManager },\r\n // { lifecycle: Lifecycle.Singleton }\r\n // );\r\n};\r\n","export * from \"./RegisterOfficeServices\"","import { OutlookOrganizerDto } from \"./dto/OutlookOrganizerDto\";\r\nimport { OutlookRecipientDto } from \"./dto/OutlookRecipientDto\";\r\n\r\nexport class OutlookOrganizerRepository {\r\n GetOrganizer(): OutlookOrganizerDto | undefined {\r\n let organizer: OutlookOrganizerDto | undefined;\r\n try {\r\n if (Office.context && Office.context.mailbox) {\r\n let olUserProfile = Office.context.mailbox.userProfile;\r\n if (olUserProfile) {\r\n organizer = {\r\n Email: olUserProfile.emailAddress,\r\n DisplayName: olUserProfile.displayName,\r\n TimeZoneName: olUserProfile.timeZone,\r\n };\r\n }\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return organizer;\r\n }\r\n\r\n async GetRealOrganizerOfAppointment(): Promise {\r\n let item = Office?.context?.mailbox?.item;\r\n let organizer: OutlookRecipientDto | undefined;\r\n\r\n if (typeof item?.getSharedPropertiesAsync != \"function\") return organizer;\r\n\r\n if (item && item.itemType === Office.MailboxEnums.ItemType.Appointment) {\r\n let appCompose = item as Office.AppointmentCompose;\r\n\r\n if (appCompose) {\r\n // Sử dụng Promise để đồng bộ hóa kết quả\r\n organizer = await new Promise((resolve, reject) => {\r\n appCompose.organizer.getAsync((result) => {\r\n if (result.status === Office.AsyncResultStatus.Failed) {\r\n return reject(new Error(result.error.message));\r\n }\r\n\r\n if (result.value) {\r\n resolve({\r\n Email: result.value.emailAddress,\r\n Name: result.value.displayName,\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n return organizer;\r\n }\r\n}\r\n","import { LanguageConverter } from \"booking-app-op\";\r\n\r\nexport class OutlookSettingsRepository {\r\n SetAppSetting(key: string, value: any): boolean {\r\n let isSuccess = false;\r\n try {\r\n if (Office.context && Office.context.roamingSettings) {\r\n Office.context.roamingSettings.set(key, value);\r\n Office.context.roamingSettings.saveAsync();\r\n isSuccess = true;\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return isSuccess;\r\n }\r\n GetAppSetting(key: string): any {\r\n let value = \"\";\r\n try {\r\n if (Office.context && Office.context.roamingSettings) {\r\n value = Office.context.roamingSettings.get(key);\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return value;\r\n }\r\n GetOutlookLanguage(): string {\r\n let language = \"\";\r\n try {\r\n if (Office.context) {\r\n language = LanguageConverter.Map(Office.context.displayLanguage);\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return language;\r\n }\r\n GetTimeZoneOffset(): number {\r\n let tzOffset = 0;\r\n try {\r\n if (Office.context && Office.context.mailbox) {\r\n tzOffset = Office.context.mailbox.convertToLocalClientTime(new Date()).timezoneOffset;\r\n }\r\n } catch (ex) {\r\n //console.log(ex);\r\n }\r\n return tzOffset;\r\n }\r\n NotificationMessages(id: string, details: any, handleResult: any): void {\r\n if (Office.context && Office.context.mailbox && Office.context.mailbox.item) {\r\n Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult);\r\n }\r\n }\r\n GetOutlookTheme(): string {\r\n try {\r\n if (Office.context && Office.context.officeTheme) {\r\n const office: any = Office.context.officeTheme;\r\n const themeId = office?.themeId || office.bodyBackgroundColor || \"#000003\";\r\n return themeId;\r\n }\r\n } catch (ex) {\r\n console.log(\"error\", ex);\r\n }\r\n return \"#000003\";\r\n }\r\n}\r\n","export * from \"./OutlookOrganizerRepository\"\r\nexport * from \"./OutlookSettingsRepository\"","export const PERMISSION = [\r\n \"user.read\",\r\n \"openid\",\r\n \"profile\",\r\n \"Calendars.Read.Shared\",\r\n \"Directory.Read.All\",\r\n ]","import \"reflect-metadata\";\r\nimport * as React from \"react\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport { container } from \"tsyringe\";\r\nimport { BookingOPAddin, IAuthenticationService, TokenIAuthenticationService, IConfiguration } from \"booking-app-op\";\r\nimport { RegisterOfficeServices } from \"../../ioc\";\r\nimport {\r\n INestedAppAuthenticationService,\r\n TokenINestedAppAuthenticationService,\r\n} from \"../../authentication/INestedAppAuthenticationService\";\r\n\r\nRegisterOfficeServices(container);\r\n\r\nconst RFLauncher = () => {\r\n const [isInitialized, setIsInitialized] = React.useState(false);\r\n const [isSupported, setIsSupported] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n setIsInitialized(true);\r\n }, [0]);\r\n\r\n return isSupported ? isInitialized ? :
:
error
;\r\n};\r\n\r\nconst rootElement: HTMLElement = document.getElementById(\"container\");\r\n\r\n/* Render application after Office initializes */\r\n\r\nif (rootElement) {\r\n // const application = createRoot(portalDiv);\r\n\r\n if (typeof Office === \"undefined\") {\r\n // cannot load Office.js because of slow networks\r\n createRoot(rootElement).render(
Error
);\r\n } else {\r\n Office.onReady(async function () {\r\n const nestedAppAuthenticationService: INestedAppAuthenticationService = container.resolve(\r\n TokenINestedAppAuthenticationService\r\n );\r\n const accountType = Office.context.mailbox.userProfile.accountType;\r\n const loginHint =\r\n accountType === \"office365\" || accountType === \"outlookCom\"\r\n ? Office.context.mailbox.userProfile.emailAddress\r\n : \"\";\r\n\r\n const configuration: IConfiguration = {\r\n id: \"55d7cabc-cb78-4288-9196-27a7de163977\",\r\n tenantId: \"8fe418f8-5aeb-46bb-bfcb-9a61c6b07538\",\r\n applicationIdUri: \"api://booking-op-review.add-on-company.com/32ea7b9c-ddb4-489d-bd24-286403992e86\",\r\n callBackUrl: \"https://booking-op-review.add-on-company.com\",\r\n clientId: \"32ea7b9c-ddb4-489d-bd24-286403992e86\",\r\n };\r\n\r\n await nestedAppAuthenticationService.initialize(\r\n loginHint,\r\n configuration.clientId,\r\n configuration.tenantId,\r\n configuration.callBackUrl\r\n );\r\n\r\n const authenticationService: IAuthenticationService = container.resolve(TokenIAuthenticationService);\r\n\r\n await authenticationService.GetAccessTokenFromAAD(configuration).then((isAuthenticated) => {\r\n if (!isAuthenticated) {\r\n createRoot(rootElement).render(\r\n
Incorrect configuration in External Authentication
\r\n );\r\n } else {\r\n createRoot(rootElement).render();\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n// if ((module as any).hot) {\r\n// (module as any).hot.accept(\"./components/App\", () => {\r\n// const NextApp = require(\"./components/App\").default;\r\n// root.render(NextApp);\r\n// });\r\n// }\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = 609;","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [234], function() { return __webpack_require__(89748); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","installedChunks","booking_app_op_1","require","axios_1","__importDefault","INestedAppAuthenticationService_1","permission_1","AuthenticationService","_baseURL","window","RESOURCE_CENTRAL_ENDPOINT","_baseAPI_URL","API_ENDPOINT","_token","undefined","this","_nestedAppAuthenticationService","baContainer","resolve","TokenINestedAppAuthenticationService","prototype","GetCallbackToken","ssoGetToken","PERMISSION","_a","sent","GetTokenFromAAD","Office","auth","getAccessToken","allowSignInPrompt","allowConsentPrompt","GetAccessTokenFromAAD","_configuration","getTokenSSO","organizer","ssoGetUserIdentity","userAccount","object","accessToken","idToken","expiresOn","sessionStorage","setItem","JSON","stringify","handleClientSideErrors","code","dialogFallback","context","mailbox","userProfile","url","location","hostname","port","protocol","displayName","emailAddress","fullUrl","ui","displayDialogAsync","height","width","_processMessage","asyncResult","dialog","value","addEventHandler","EventType","DialogEventReceived","args","error","DialogMessageReceived","message","parse","status","close","reload","GetUserIdentityToken","console","log","error_2","saveTokenToRC","_organizerEmail","configuration","TokenIOrganizationService","GetCurrentOrganizer","payloadToRc","organizerEmail","Email","refreshToken","expiredTime","urlRefreshToken","concat","tenantId","updateOrganizerPreferences","payload","headers","accept","default","post","then","_response","data","catch","fetchConfigAuth","get","response","exports","msal_browser_1","NestedAppAuthenticationService","loginHint","pca","initialize","clientId","_tenantId","callBackUrl","msalConfig","authority","supportsNestedAppAuth","redirectUri","cache","cacheLocation","storeAuthStateInCookie","PublicClientNext","createPublicClientApplication","_b","scopes","Error","tokenRequest","getActiveAccount","acquireTokenSilent","ssoSilent","error_1","acquireTokenPopup","popupError_1","__exportStar","DialogService","_this","sessionCallback","sessionData","existingValues_1","item","currentValue","indexOf","Set","split","forEach","add","Array","from","join","setAsync","customPropsCallback","customProps","rcTempId","existingValues_2","AsyncResultStatus","Failed","newValue","asyncContext","set","saveAsync","saveCallback","loadCustomPropertiesAsync","a","getAll","ShowDialog","options","callback","dialogOptions","displayInIframe","Width","Height","dialogObject_1","Succeeded","eventType","handler","officeEventType","DialogEventType","messageChild","messageOptions","MessageParent","messageObject","messageParent","SaveSessionDataDialog","getAsync","models_1","tsyringe_1","OutlookAppointmentExtractor","apptItem","_apptItem","_callback","_olOrganizerRepository","container","TokenIOutlookOrganizerRepository","Extract","apptInfo","StartTime","Date","EndTime","Recipients","EnhancedLocations","requiredAttendees","_getRequiredRecipientCallback","bind","requiredRecipients","requiredOlRecipients","map","rs","Name","r","push","OutlookRecipient","RecipientType","ResourceType","optionalAttendees","getOptionalRecipientCallback","ex","optionalRecipients","optionalOlRecipients","requirements","isSetSupported","enhancedLocation","getEnhancedLocationsCallback","locations","olLocations","getStartTimeCallback","end","getEndTimeCallback","recurrence","getRecurrenceCallback","Recurrence","Organizer","GetOrganizer","RecurringHelper_1","authentication_1","OutlookAppointmentManager","_customUidKey","_uidKey","_rcExtendedResourcesKey","_rcExtendedResourcesTimeStampKey","_platformService","TokenIPlatformService","_startedFlag","OutlookAppointmentStartedFlag","_watchingFlag","OutlookAppointmentWatchingFlag","_running","OnChanged","CustomLibary","Event","OnStarted","OnDateTimeChanged","OnRecipientsChanged","OnRecurrenceChanged","_locker","OutlookAppointmentLocker","_appointment","OutlookAppointment","_getItemId","_lastAttendeeSynctime","now","GetMessageUrl","resVersion","MailboxEnums","RestVersion","v2_0","ItemId","convertToRestId","GetMessageUrlCallback","Promise","reject","strRestid","itemType","ItemType","Appointment","appCompose","seriesId","GetCurrentPlatform","WebAddinPlatforms","OutlookForMac","getItemIdAsync","result","GetAppointment","Export","GetRealOrganizerOfAppointment","realOrganizer","_e","DisplayName","_d","_c","Start","_extendAppointment","_appointmentWatcher","UpdateResources","_resources","allRecipients","ExportRecipients","Fire","_notifyChange","Resources","_startSuccess","AddResources","resources","isPlatformMac","setTimeout","_addResources","_setLocations","addedResources","AddRecipients","_addResourcesToOutlook","AddRequiredAttendee","_addRequiredAttendeesToOutlook","RemoveResources","resourceEmails","_removeResources","DeleteLocations","UpdateRecipients","recipients","resourceDtos","isUpdated","_updateAttendeesToOutlook","RequiredRecipients","OptionalRecipients","UpdateAppointmentBaseInfo","apptDto","properties","Guid","GlobalId","CustomUid","Uid","OriginalStart","OriginalEnd","HaveOrder","HaveNormalOrder","IsReOpenAfterSent","IsReopenAfterSent","_setCustomProperty","GetRecipients","length","RemoveRecipients","_updateRecipientsToOutlook","filter","rep","toLowerCase","_setRequiredAttendeesToOutlook","_setOptionalAttendeesToOutlook","requireRecipientsToRemove","equipments","ExchangeResourceTypeEnum","Equipment","currentRecipients","apply","_setRcResourcesToOutlook","currentResources","appCompose_1","newRecipientsMap","olRecipients_1","olRecipient","appointmentResponse","ResponseType","None","recipientType","Other","recipientsToSet","oldRecipientsMap","oldRp","newRp","newRecipients","olRecipients","addAsync","newResources","olResources","newResourcesEquipment","newResourcesRoom","olResourcesLocation","SetLocations2","Room","Workspace","id","type","LocationType","_asyncResult","rcExtendedResources","_setCustomRcExtendedResources","emailSet_1","olRecipients_2","has","locationIdentifiers","emailSet_2","olRecipients_3","removeAsync","SetLocations","appCompose_2","locationsString_1","oldLocation","newLocation","__spreadArray","ReplaceLocation","appCompose_3","appCompose_4","includes","trim","IsPlatformSupported","locationsString","IsStarted","_loadCustomProperties","_loadCustomPropertiesCallback","_syncAppointmentInfo","_subscribeApptEvent","EnableWatching","setInterval","_processWatch","watchTimeStamp","appCompose_5","OrganizerEmail","timeStamp","isRecipientsUpdated","_watchRequiredRecipient","start","Done","_done","SeriesId","_loadMeetingRecurrenceInfo","_watchStartTime","subject","_watchSubject","EnableWatchRecipients","EnableWatchTime","EnableWatchSubject","appCompose_6","olRecipientsLocation_1","addHandlerAsync","AppointmentTimeChanged","_appTimeChangeHandler","_subscribeApptTimeChangedCallback","EnhancedLocationsChanged","_resourceEnhancedLocationsChangedHandler","_result","RecipientsChanged","RecurrenceChanged","_recurringPatternChangeHandler","_recurringPatternChangeCallback","Custom","rcResources","enhancedLocations","locationIdentifier","_watchResourcesEnhancedLocation","_eventArgs","isChanged","eventArgs","option","IsChanged","_loadMeetingRecurrenceInfoCallback","_obj","recurrenceInfo","getStart","newStartTime","getEnd","newEndTime","isOldRecurringMaster","IsRecurringMaster","Occurrences","IsOccurence","_notifyRecurrenceChanged","RecurringHelper","GetRecurringDates","occurrences","RecurringAppDuration","seriesTime","getDuration","toString","IsNoEndDate","getEndDate","copyAppt","Series","StartTicks","StartTimeTicks","EndTicks","EndTimeTicks","End","ChangeType","RecurringChangeTypeEnum","ChangePattern","RecurringToNormal","NormalToRecurring","res","callbacks","_loadSessionData","_context","getAllAsync","UpdateRequiredRecipients","_watchOptionalRecipient","UpdateOptionalAttendees","_watchEnhancedLocations","_watchRCExtendedResources","option_1","_watchRCExtendedCustomResources","customRcExtendedResources","intervalId_1","appCompose_7","optionsStart","DateTime","clearInterval","isStartTimeChanged","isEndTimeChanged","_processChangeDateTime","_getEndTimeResult","_getStartTimeResult","isStartTimeUpdated","UpdateStartTime","isEndTimeUpdated","UpdateEndTime","eventArg","intervalId_2","Subject","UpdateSubject","getUidForDesktop","getMessageUrl","replace","Authorization","singleValueExtendedPropertiesValue","singleValueExtendedProperties","CUSTOM_UID","customProperties","customUid","currentPlatform","DesktopClient","Outlook2016","uidApi","uid","CustomProperties","receipients","isAdd","Properties","IsAdd","_setCustomRcExtendedResourcesCallback","key","rcResources_1","this_1","t","x","clearAllCustomProperties","allKeys","hasOwnProperty","remove","saveAsyncResult","UpdateBodyForSendToAll","_key","sendToAll","appCompose_8","htmlOptions_1","OWA","coercionType","CoercionType","Html","body","prependedBody","_setCustomPropertyCallback","IsNewBooking","_propertyName$p$0","_type$p$0","SaveDataResourceInfo","ConvertTimeDisplayLocalUTC","dateTime","convertDT","platform","PlatformType","OfficeOnline","convertToLocalClientTime","convertToUtcClientTime","CreateNewUid","UidGenerator","NewUid","asyncContext_2","PlatformService","IsSetSupported","name","minVersion","GetDateTimeOffset","timezoneOffset","currentPlatforms","diagnostics","host","HostType","Outlook","Mac","PC","versionArr","version","ConvertUtils","ToInt","hostVersion","GetPlatformString","IsOnPremSystem","accountType","GetSpecificVersion","_isStopCheck","baseVersion","GetRunningPlatform","VrService","OutlookRecipient_1","Object","defineProperty","_isReOpenAfterSent","isReopenAfterSent","_recurringAppDuration","_originalEnd","_originalStart","_itemId","itemId","_uid","_customUid","_globalId","globalId","_guid","guid","_copyRecipients","_requiredRecipients","_optionalRecipients","_occurrences","StartInOrgTz","EndInOrgTz","IsDeleted","dto","_seriesId","_isRecurringMaster","_isNoEndDate","_isOccurence","_haveOrder","_haveNormalOrder","_setOptionalRecipients","_emptyOptionalRecipients","rpt","_pushOptionalRecipients","_setRequiredRecipients","_emptyRequiredRecipients","_pushRequiredRecipients","recipient","_requiredRecipientsMap","OutlookRecipientTypeEnum","Required","_pushResources","_resourcesMap","_optionalRecipientsMap","Optional","create","GetResource","_subject","convertToNetTicks","_startInTicks","_start","_endInTicks","_end","self","_isPlatformSupported","requiredAttendee","addedRequiredAttendees","email","currentRequiredMap","currentRequiredRecipients","deletedRequired","_organizerInRequiredAttendees","deletedRs","addedRequired","addedRs","currentOptionalMap","currentOptionalRecipients","deletedOptional","addedOptional","isRequiredRemoved","isOptionalRemoved","oldAttendee","_isOptionalRecipients","some","_concatResourcesFromCustomProperties","fullRecipients","newResourceMap","deletedResources","SessionId","_sessionId","IsReOpen","_minVersionPlatform","EnableWatchEnhancedLocations","resourceType","_email","_resourceType","PlatformHelper","recurrencePattern","noEndOccurrences","recurringOccs","occurrence","CalculateFirstOccurrence","endDate","endDateStr","maxNumberOfOccs","StringToDate","addDates","GetNextOccurrence","platformService","recurrenceType","RecurrenceType","Weekly","dayOfWeekNumber","propertiesDayOfWeek","recurrenceProperties","dayOfWeek","days","i","dayOfweek","MapDaysOfWeekString","daysOfWeekInNumber","MapDaysOfWeekToNumber","firstOccDay","getDay","pattern","startDateTime","firstOcc","startDate","getStartDate","startTime","StringToTime","getStartTime","duration","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","addMinutes","prevOcc","occDaysOfNextMonth","Daily","interval","nextOcc","Weekday","daysOfWeek","olDaysOfWeekEnum","Days","Sun","CloneDateTime","MapDaysOfWeek","Sat","nextOccDaysOfWeek","prevDaysOfWeek","minDaysOfWeek","nextOccDays","maxDaysOfWeek","nextRecurringWeek","addWeeks","CloneDateTimeFromSeparateSource","Monthly","dayOfMonth","addMonths","nextMonthRepDays","firstDaysInNextMonth","GetOccDaysOfMonth","Yearly","addYears","nextOccYear","firstDayOfNextOccMonth","firstDaysOfMonth","occDaysOfWeeksInNumber","occDaysOfWeeks","olWeekNumberTypeEnum","WeekNumber","occDaysOfMonth","occDateInFirstWeek","firstDaysInNextMonthDaysOfWeek","weekNumber","Last","lastOccDateInMonth","occWeekNumber","MapWeekNumberByString","weeksInMonthNumber","MapWeekNumber","olDaysOfWeek","Mon","Tue","Wed","Thu","Fri","WeekendDay","Day","First","Second","Third","Fourth","weekNumberEnum","implementations_1","repositories_1","VrService_1","DialogService_1","NestedAppAuthenticationService_1","RegisterRFServices","register","TokenIAuthenticationService","useClass","lifecycle","Lifecycle","Singleton","TokenIAppointmentManager","OutlookOrganizerRepository","TokenIOutlookSettingsRepository","OutlookSettingsRepository","TokenIVrService","TokenIDialogService","olUserProfile","TimeZoneName","timeZone","getSharedPropertiesAsync","SetAppSetting","isSuccess","roamingSettings","GetAppSetting","GetOutlookLanguage","language","LanguageConverter","Map","displayLanguage","GetTimeZoneOffset","tzOffset","NotificationMessages","details","handleResult","notificationMessages","GetOutlookTheme","office","officeTheme","themeId","bodyBackgroundColor","RFLauncher","isInitialized","React","useState","setIsInitialized","isSupported","useEffect","BookingOPAddin","rootElement","RegisterOfficeServices","document","getElementById","createRoot","render","onReady","nestedAppAuthenticationService","applicationIdUri","isAuthenticated","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","__webpack_modules__","call","webpackJsonpCallback","parentChunkLoadingFunction","chunkId","chunkIds","moreModules","runtime","o","m","O","fn","priority","notFulfilled","Infinity","fulfilled","j","keys","every","splice","n","getter","__esModule","d","getPrototypeOf","obj","__proto__","mode","ns","def","current","getOwnPropertyNames","definition","enumerable","g","globalThis","Function","e","prop","Symbol","toStringTag","609","chunkLoadingGlobal","nc","__webpack_exports__"],"sourceRoot":""}