{"version":3,"file":"Utility.js","sources":["../../Framework/Utility/http.ts","../../Framework/Utility/address.ts","../../Framework/Utility/arrayUtils.ts","../../Framework/Utility/linq.ts","../../Framework/Utility/guid.ts","../../Framework/Utility/stringUtils.ts","../../Framework/Utility/aspDateFormat.ts","../../Framework/Utility/rockDateTime.ts","../../Framework/Utility/block.ts","../../Framework/Utility/booleanUtils.ts","../../Framework/Utility/bus.ts","../../Framework/Utility/cache.ts","../../Framework/Utility/util.ts","../../Framework/Utility/suspense.ts","../../Framework/Utility/component.ts","../../Framework/Utility/numberUtils.ts","../../Framework/Utility/dateKey.ts","../../Framework/Utility/page.ts","../../Framework/Utility/dialogs.ts","../../Framework/Utility/email.ts","../../Framework/Utility/fieldTypes.ts","../../Framework/Utility/form.ts","../../Framework/Utility/fullscreen.ts","../../Framework/Utility/geo.ts","../../Framework/Utility/internetCalendar.ts","../../Framework/Utility/mergeField.ts","../../Framework/Utility/objectUtils.ts","../../Framework/Utility/phone.ts","../../Framework/Utility/popover.ts","../../Framework/Utility/promiseUtils.ts","../../Framework/Utility/realTime.ts","../../Framework/Utility/slidingDateRange.ts","../../Framework/Utility/tooltip.ts","../../Framework/Utility/treeItemProviders.ts","../../Framework/Utility/url.ts","../../Framework/Utility/validationRules.ts"],"sourcesContent":["// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport axios, { AxiosResponse } from \"axios\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { HttpBodyData, HttpMethod, HttpFunctions, HttpResult, HttpUrlParams } from \"@Obsidian/Types/Utility/http\";\r\nimport { inject, provide } from \"vue\";\r\n\r\n\r\n// #region HTTP Requests\r\n\r\n/**\r\n * Make an API call. This is only place Axios (or AJAX library) should be referenced to allow tools like performance metrics to provide\r\n * better insights.\r\n * @param method\r\n * @param url\r\n * @param params\r\n * @param data\r\n */\r\nasync function doApiCallRaw(method: HttpMethod, url: string, params: HttpUrlParams, data: HttpBodyData): Promise> {\r\n return await axios({\r\n method,\r\n url,\r\n params,\r\n data\r\n });\r\n}\r\n\r\n/**\r\n * Make an API call. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} method The HTTP method, such as GET\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n * @param {any} data This will be the body of the request\r\n */\r\nexport async function doApiCall(method: HttpMethod, url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined): Promise> {\r\n try {\r\n const result = await doApiCallRaw(method, url, params, data);\r\n\r\n return {\r\n data: result.data as T,\r\n isError: false,\r\n isSuccess: true,\r\n statusCode: result.status,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n catch (e) {\r\n if (axios.isAxiosError(e)) {\r\n if (e.response?.data?.Message || e?.response?.data?.message) {\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: e.response.status,\r\n errorMessage: e?.response?.data?.Message ?? e.response.data.message\r\n } as HttpResult;\r\n }\r\n\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: e.response?.status ?? 0,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n else {\r\n return {\r\n data: null,\r\n isError: true,\r\n isSuccess: false,\r\n statusCode: 0,\r\n errorMessage: null\r\n } as HttpResult;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Make a GET HTTP request. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n */\r\nexport async function get(url: string, params: HttpUrlParams = undefined): Promise> {\r\n return await doApiCall(\"GET\", url, params, undefined);\r\n}\r\n\r\n/**\r\n * Make a POST HTTP request. This is a special use function that should not\r\n * normally be used. Instead call useHttp() to get the HTTP functions that\r\n * can be used.\r\n *\r\n * @param {string} url The endpoint to access, such as /api/campuses/\r\n * @param {object} params Query parameter object. Will be converted to ?key1=value1&key2=value2 as part of the URL.\r\n * @param {any} data This will be the body of the request\r\n */\r\nexport async function post(url: string, params: HttpUrlParams = undefined, data: HttpBodyData = undefined): Promise> {\r\n return await doApiCall(\"POST\", url, params, data);\r\n}\r\n\r\nconst httpFunctionsSymbol = Symbol(\"http-functions\");\r\n\r\n/**\r\n * Provides the HTTP functions that child components will use. This is an\r\n * internal API and should not be used by third party components.\r\n *\r\n * @param functions The functions that will be made available to child components.\r\n */\r\nexport function provideHttp(functions: HttpFunctions): void {\r\n provide(httpFunctionsSymbol, functions);\r\n}\r\n\r\n/**\r\n * Gets the HTTP functions that can be used by the component. This is the\r\n * standard way to make HTTP requests.\r\n *\r\n * @returns An object that contains the functions which can be called.\r\n */\r\nexport function useHttp(): HttpFunctions {\r\n return inject(httpFunctionsSymbol) || {\r\n doApiCall: doApiCall,\r\n get: get,\r\n post: post\r\n };\r\n}\r\n\r\n// #endregion\r\n\r\n// #region File Upload\r\n\r\ntype FileUploadResponse = {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n Guid: Guid;\r\n FileName: string;\r\n /* eslint-enable */\r\n};\r\n\r\n/**\r\n * Progress reporting callback used when uploading a file into Rock.\r\n */\r\nexport type UploadProgressCallback = (progress: number, total: number, percent: number) => void;\r\n\r\n/**\r\n * Options used when uploading a file into Rock to change the default behavior.\r\n */\r\nexport type UploadOptions = {\r\n /**\r\n * The base URL to use when uploading the file, must accept the same parameters\r\n * and as the standard FileUploader.ashx handler.\r\n */\r\n baseUrl?: string;\r\n\r\n /** True if the file should be uploaded as temporary, only applies to binary files. */\r\n isTemporary?: boolean;\r\n\r\n /** A function to call to report the ongoing progress of the upload. */\r\n progress: UploadProgressCallback;\r\n};\r\n\r\n/**\r\n * Uploads a file in the form data into Rock. This is an internal function and\r\n * should not be exported.\r\n *\r\n * @param url The URL to use for the POST request.\r\n * @param data The form data to send in the request body.\r\n * @param progress The optional callback to use to report progress.\r\n *\r\n * @returns The response from the upload handler.\r\n */\r\nasync function uploadFile(url: string, data: FormData, progress: UploadProgressCallback | undefined): Promise {\r\n const result = await axios.post(url, data, {\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\"\r\n },\r\n onUploadProgress: (event: ProgressEvent) => {\r\n if (progress) {\r\n progress(event.loaded, event.total, Math.floor(event.loaded * 100 / event.total));\r\n }\r\n }\r\n });\r\n\r\n // Check for a \"everything went perfectly fine\" response.\r\n if (result.status === 200 && typeof result.data === \"object\") {\r\n return result.data;\r\n }\r\n\r\n if (result.status === 406) {\r\n throw \"File type is not allowed.\";\r\n }\r\n\r\n if (typeof result.data === \"string\") {\r\n throw result.data;\r\n }\r\n\r\n throw \"Upload failed.\";\r\n}\r\n\r\n/**\r\n * Uploads a file to the Rock file system, usually inside the ~/Content directory.\r\n *\r\n * @param file The file to be uploaded to the server.\r\n * @param encryptedRootFolder The encrypted root folder specified by the server,\r\n * this specifies the jail the upload operation is limited to.\r\n * @param folderPath The additional sub-folder path to use inside the root folder.\r\n * @param options The options to use when uploading the file.\r\n *\r\n * @returns A ListItemBag that contains the scrubbed filename that was uploaded.\r\n */\r\nexport async function uploadContentFile(file: File, encryptedRootFolder: string, folderPath: string, options?: UploadOptions): Promise {\r\n const url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?rootFolder=${encryptedRootFolder}`;\r\n const formData = new FormData();\r\n\r\n formData.append(\"file\", file);\r\n\r\n if (folderPath) {\r\n formData.append(\"folderPath\", folderPath);\r\n }\r\n\r\n const result = await uploadFile(url, formData, options?.progress);\r\n\r\n return {\r\n value: \"\",\r\n text: result.FileName\r\n };\r\n}\r\n\r\n/**\r\n * Uploads a BinaryFile into Rock. The specific storage location is defined by\r\n * the file type.\r\n *\r\n * @param file The file to be uploaded into Rock.\r\n * @param binaryFileTypeGuid The unique identifier of the BinaryFileType to handle the upload.\r\n * @param options The options ot use when uploading the file.\r\n *\r\n * @returns A ListItemBag whose value contains the new file Guid and text specifies the filename.\r\n */\r\nexport async function uploadBinaryFile(file: File, binaryFileTypeGuid: Guid, options?: UploadOptions): Promise {\r\n let url = `${options?.baseUrl ?? \"/FileUploader.ashx\"}?isBinaryFile=True&fileTypeGuid=${binaryFileTypeGuid}`;\r\n\r\n // Assume file is temporary unless specified otherwise so that files\r\n // that don't end up getting used will get cleaned up.\r\n if (options?.isTemporary === false) {\r\n url += \"&isTemporary=False\";\r\n }\r\n else {\r\n url += \"&isTemporary=True\";\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n const result = await uploadFile(url, formData, options?.progress);\r\n\r\n return {\r\n value: result.Guid,\r\n text: result.FileName\r\n };\r\n}\r\n\r\n// #endregion\r\n\r\nexport default {\r\n doApiCall,\r\n post,\r\n get\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { HttpResult } from \"@Obsidian/Types/Utility/http\";\r\nimport { AddressControlBag } from \"@Obsidian/ViewModels/Controls/addressControlBag\";\r\nimport { AddressControlValidateAddressOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressOptionsBag\";\r\nimport { AddressControlValidateAddressResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/AddressControlValidateAddressResultsBag\";\r\nimport { post } from \"./http\";\r\n\r\nexport function getDefaultAddressControlModel(): AddressControlBag {\r\n return {\r\n state: \"AZ\",\r\n country: \"US\"\r\n };\r\n}\r\n\r\nexport function validateAddress(address: AddressControlValidateAddressOptionsBag): Promise> {\r\n return post(\"/api/v2/Controls/AddressControlValidateAddress\", undefined, address);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Flatten a nested array down by the given number of levels.\r\n * Meant to be a replacement for the official Array.prototype.flat, which isn't supported by all browsers we support.\r\n * Adapted from Polyfill: https://github.com/behnammodi/polyfill/blob/master/array.polyfill.js#L591\r\n *\r\n * @param arr (potentially) nested array to be flattened\r\n * @param depth The depth level specifying how deep a nested array structure should be flattened. Defaults to 1.\r\n *\r\n * @returns A new array with the sub-array elements concatenated into it.\r\n */\r\nexport const flatten = (arr: T[][], depth: number = 1): T[] => {\r\n const result: T[] = [];\r\n const forEach = result.forEach;\r\n\r\n const flatDeep = function (arr, depth): void {\r\n forEach.call(arr, function (val) {\r\n if (depth > 0 && Array.isArray(val)) {\r\n flatDeep(val, depth - 1);\r\n }\r\n else {\r\n result.push(val);\r\n }\r\n });\r\n };\r\n\r\n flatDeep(arr, depth);\r\n return result;\r\n};","/**\r\n * A function that will select a value from the object.\r\n */\r\ntype ValueSelector = (value: T) => string | number | boolean | null | undefined;\r\n\r\n/**\r\n * A function that will perform testing on a value to see if it meets\r\n * a certain condition and return true or false.\r\n */\r\ntype PredicateFn = (value: T, index: number) => boolean;\r\n\r\n/**\r\n * A function that will compare two values to see which one should\r\n * be ordered first.\r\n */\r\ntype ValueComparer = (a: T, b: T) => number;\r\n\r\nconst moreThanOneElement = \"More than one element was found in collection.\";\r\n\r\nconst noElementsFound = \"No element was found in collection.\";\r\n\r\n/**\r\n * Compares the values of two objects given the selector function.\r\n *\r\n * For the purposes of a compare, null and undefined are always a lower\r\n * value - unless both values are null or undefined in which case they\r\n * are considered equal.\r\n * \r\n * @param keySelector The function that will select the value.\r\n * @param descending True if this comparison should be in descending order.\r\n */\r\nfunction valueComparer(keySelector: ValueSelector, descending: boolean): ValueComparer {\r\n return (a: T, b: T): number => {\r\n const valueA = keySelector(a);\r\n const valueB = keySelector(b);\r\n\r\n // If valueA is null or undefined then it will either be considered\r\n // lower than or equal to valueB.\r\n if (valueA === undefined || valueA === null) {\r\n // If valueB is also null or undefined then they are considered equal.\r\n if (valueB === undefined || valueB === null) {\r\n return 0;\r\n }\r\n\r\n return !descending ? -1 : 1;\r\n }\r\n\r\n // If valueB is undefined or null (but valueA is not) then it is considered\r\n // a lower value than valueA.\r\n if (valueB === undefined || valueB === null) {\r\n return !descending ? 1 : -1;\r\n }\r\n\r\n // Perform a normal comparison.\r\n if (valueA > valueB) {\r\n return !descending ? 1 : -1;\r\n }\r\n else if (valueA < valueB) {\r\n return !descending ? -1 : 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Provides LINQ style access to an array of elements.\r\n */\r\nexport class List {\r\n /** The elements being tracked by this list. */\r\n protected elements: T[];\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new list with the given elements.\r\n * \r\n * @param elements The elements to be made available to LINQ queries.\r\n */\r\n constructor(elements?: T[]) {\r\n if (elements === undefined) {\r\n this.elements = [];\r\n }\r\n else {\r\n // Copy the array so if the caller makes changes it won't be reflected by us.\r\n this.elements = [...elements];\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new List from the elements without copying to a new array.\r\n * \r\n * @param elements The elements to initialize the list with.\r\n * @returns A new list of elements.\r\n */\r\n public static fromArrayNoCopy(elements: T[]): List {\r\n const list = new List();\r\n\r\n list.elements = elements;\r\n\r\n return list;\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Returns a boolean that determines if the collection contains any elements.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(): boolean;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns a boolean that determines\r\n * if the filtered collection contains any elements.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(predicate: PredicateFn): boolean;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns a boolean that determines\r\n * if the filtered collection contains any elements.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns true if the collection contains any elements; otherwise false.\r\n */\r\n public any(predicate?: PredicateFn): boolean {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n return elements.length > 0;\r\n }\r\n\r\n /**\r\n * Returns the first element from the collection if there are any elements.\r\n * Otherwise will throw an exception.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * in the collection if any remain. Otherwise throws an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(predicate: PredicateFn): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * in the collection if any remain. Otherwise throws an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the collection.\r\n */\r\n public first(predicate?: PredicateFn): T {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length >= 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw noElementsFound;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the first element found in the collection or undefined if the\r\n * collection contains no elements.\r\n *\r\n * @returns The first element in the collection or undefined.\r\n */\r\n public firstOrUndefined(): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the filtered collection or undefined.\r\n */\r\n public firstOrUndefined(predicate: PredicateFn): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the first element\r\n * found in the collection. If no elements remain then undefined is\r\n * returned instead.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns The first element in the filtered collection or undefined.\r\n */\r\n public firstOrUndefined(predicate?: PredicateFn): T | undefined {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a single element from the collection if there is a single\r\n * element. Otherwise will throw an exception.\r\n *\r\n * @returns An element.\r\n */\r\n public single(): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single remaining\r\n * element from the collection. If more than one element remains then an\r\n * exception will be thrown.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element.\r\n */\r\n public single(predicate: PredicateFn): T;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single remaining\r\n * element from the collection. If more than one element remains then an\r\n * exception will be thrown.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element.\r\n */\r\n public single(predicate?: PredicateFn): T {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw moreThanOneElement;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a single element from the collection if there is a single\r\n * element. If no elements are found then undefined is returned. More\r\n * than a single element will throw an exception.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single element\r\n * from the collection if there is only one remaining. If no elements\r\n * remain then undefined is returned. More than a single element will throw\r\n * an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(predicate: PredicateFn): T | undefined;\r\n\r\n /**\r\n * Filters the list by the predicate and then returns the single element\r\n * from the collection if there is only one remaining. If no elements\r\n * remain then undefined is returned. More than a single element will throw\r\n * an exception.\r\n *\r\n * @param predicate The predicate to filter the elements by.\r\n *\r\n * @returns An element or undefined.\r\n */\r\n public singleOrUndefined(predicate?: PredicateFn): T | undefined {\r\n let elements = this.elements;\r\n\r\n if (predicate !== undefined) {\r\n elements = elements.filter(predicate);\r\n }\r\n\r\n if (elements.length === 0) {\r\n return undefined;\r\n }\r\n else if (elements.length === 1) {\r\n return elements[0];\r\n }\r\n else {\r\n throw moreThanOneElement;\r\n }\r\n }\r\n\r\n /**\r\n * Orders the elements of the array and returns a new list of items\r\n * in that order.\r\n * \r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public orderBy(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, false);\r\n\r\n return new OrderedList(this.elements, comparer);\r\n }\r\n\r\n /**\r\n * Orders the elements of the array in descending order and returns a\r\n * new list of items in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public orderByDescending(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, true);\r\n\r\n return new OrderedList(this.elements, comparer);\r\n }\r\n\r\n /**\r\n * Filters the results and returns a new list containing only the elements\r\n * that match the predicate.\r\n * \r\n * @param predicate The predicate to filter elements with.\r\n * \r\n * @returns A new collection of elements that match the predicate.\r\n */\r\n public where(predicate: PredicateFn): List {\r\n return new List(this.elements.filter(predicate));\r\n }\r\n\r\n /**\r\n * Get the elements of this list as a native array of items.\r\n *\r\n * @returns An array of items with all filters applied.\r\n */\r\n public toArray(): T[] {\r\n return [...this.elements];\r\n }\r\n}\r\n\r\n/**\r\n * A list of items that has ordering already applied.\r\n */\r\nclass OrderedList extends List {\r\n /** The base comparer to use when ordering. */\r\n private baseComparer!: ValueComparer;\r\n\r\n // #region Constructors\r\n\r\n constructor(elements: T[], baseComparer: ValueComparer) {\r\n super(elements);\r\n\r\n this.baseComparer = baseComparer;\r\n this.elements.sort(this.baseComparer);\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Orders the elements of the array and returns a new list of items\r\n * in that order.\r\n * \r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public thenBy(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, false);\r\n\r\n return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\r\n }\r\n\r\n /**\r\n * Orders the elements of the array in descending order and returns a\r\n * new list of items in that order.\r\n *\r\n * @param keySelector The selector for the key to be ordered by.\r\n * @returns A new ordered list of elements.\r\n */\r\n public thenByDescending(keySelector: ValueSelector): OrderedList {\r\n const comparer = valueComparer(keySelector, true);\r\n\r\n return new OrderedList(this.elements, (a: T, b: T) => this.baseComparer(a, b) || comparer(a, b));\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\n\r\n/** An empty unique identifier. */\r\nexport const emptyGuid = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n/**\r\n* Generates a new Guid\r\n*/\r\nexport function newGuid (): Guid {\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === \"x\" ? r : r & 0x3 | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n/**\r\n * Returns a normalized Guid that can be compared with string equality (===)\r\n * @param a\r\n */\r\nexport function normalize (a: Guid | null | undefined): Guid | null {\r\n if (!a) {\r\n return null;\r\n }\r\n\r\n return a.toLowerCase();\r\n}\r\n\r\n/**\r\n * Checks if the given string is a valid Guid. To be considered valid it must\r\n * be a bare guid with hyphens. Bare means not enclosed in '{' and '}'.\r\n * \r\n * @param guid The Guid to be checked.\r\n * @returns True if the guid is valid, otherwise false.\r\n */\r\nexport function isValidGuid(guid: Guid | string): boolean {\r\n return /^[0-9A-Fa-f]{8}-(?:[0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$/.test(guid);\r\n}\r\n\r\n/**\r\n * Converts the string value to a Guid.\r\n * \r\n * @param value The value to be converted.\r\n * @returns A Guid value or null is the string could not be parsed as a Guid.\r\n */\r\nexport function toGuidOrNull(value: string | null | undefined): Guid | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (!isValidGuid(value)) {\r\n return null;\r\n }\r\n\r\n return value as Guid;\r\n}\r\n\r\n/**\r\n * Are the guids equal?\r\n * @param a\r\n * @param b\r\n */\r\nexport function areEqual (a: Guid | null | undefined, b: Guid | null | undefined): boolean {\r\n return normalize(a) === normalize(b);\r\n}\r\n\r\nexport default {\r\n newGuid,\r\n normalize,\r\n areEqual\r\n};\r\n\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { areEqual, toGuidOrNull } from \"./guid\";\r\n\r\n/**\r\n * Is the value an empty string?\r\n * @param val\r\n */\r\nexport function isEmpty(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n return val.length === 0;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Is the value an empty string?\r\n * @param val\r\n */\r\nexport function isWhiteSpace(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n return val.trim().length === 0;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Is the value null, undefined or whitespace?\r\n * @param val\r\n */\r\nexport function isNullOrWhiteSpace(val: unknown): boolean {\r\n return isWhiteSpace(val) || val === undefined || val === null;\r\n}\r\n\r\n/**\r\n * Turns \"MyCamelCaseString\" into \"My Camel Case String\"\r\n * @param val\r\n */\r\nexport function splitCamelCase(val: string): string {\r\n return val.replace(/([a-z])([A-Z])/g, \"$1 $2\");\r\n}\r\n\r\n/**\r\n * Returns an English comma-and fragment.\r\n * Ex: ['a', 'b', 'c'] => 'a, b, and c'\r\n * @param strs\r\n */\r\nexport function asCommaAnd(strs: string[]): string {\r\n if (strs.length === 0) {\r\n return \"\";\r\n }\r\n\r\n if (strs.length === 1) {\r\n return strs[0];\r\n }\r\n\r\n if (strs.length === 2) {\r\n return `${strs[0]} and ${strs[1]}`;\r\n }\r\n\r\n const last = strs.pop();\r\n return `${strs.join(\", \")}, and ${last}`;\r\n}\r\n\r\n/**\r\n * Convert the string to the title case.\r\n * hellO worlD => Hello World\r\n * @param str\r\n */\r\nexport function toTitleCase(str: string | null): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.replace(/\\w\\S*/g, (word) => {\r\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\r\n });\r\n}\r\n\r\n/**\r\n * Capitalize the first character\r\n */\r\nexport function upperCaseFirstCharacter(str: string | null): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.charAt(0).toUpperCase() + str.substring(1);\r\n}\r\n\r\n/**\r\n * Returns a singular or plural phrase depending on if the number is 1.\r\n * (0, Cat, Cats) => Cats\r\n * (1, Cat, Cats) => Cat\r\n * (2, Cat, Cats) => Cats\r\n * @param num\r\n * @param singular\r\n * @param plural\r\n */\r\nexport function pluralConditional(num: number, singular: string, plural: string): string {\r\n return num === 1 ? singular : plural;\r\n}\r\n\r\n/**\r\n * Pad the left side of a string so it is at least length characters long.\r\n *\r\n * @param str The string to be padded.\r\n * @param length The minimum length to make the string.\r\n * @param padCharacter The character to use to pad the string.\r\n */\r\nexport function padLeft(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\r\n if (padCharacter == \"\") {\r\n padCharacter = \" \";\r\n }\r\n else if (padCharacter.length > 1) {\r\n padCharacter = padCharacter.substring(0, 1);\r\n }\r\n\r\n if (!str) {\r\n return Array(length).join(padCharacter);\r\n }\r\n\r\n if (str.length >= length) {\r\n return str;\r\n }\r\n\r\n return Array(length - str.length + 1).join(padCharacter) + str;\r\n}\r\n\r\n/**\r\n * Pad the right side of a string so it is at least length characters long.\r\n *\r\n * @param str The string to be padded.\r\n * @param length The minimum length to make the string.\r\n * @param padCharacter The character to use to pad the string.\r\n */\r\nexport function padRight(str: string | undefined | null, length: number, padCharacter: string = \" \"): string {\r\n if (padCharacter == \"\") {\r\n padCharacter = \" \";\r\n }\r\n else if (padCharacter.length > 1) {\r\n padCharacter = padCharacter.substring(0, 1);\r\n }\r\n\r\n if (!str) {\r\n return Array(length).join(padCharacter);\r\n }\r\n\r\n if (str.length >= length) {\r\n return str;\r\n }\r\n\r\n return str + Array(length - str.length + 1).join(padCharacter);\r\n}\r\n\r\nexport type TruncateOptions = {\r\n ellipsis?: boolean;\r\n};\r\n\r\n/**\r\n * Ensure a string does not go over the character limit. Truncation happens\r\n * on word boundaries.\r\n *\r\n * @param str The string to be truncated.\r\n * @param limit The maximum length of the resulting string.\r\n * @param options Additional options that control how truncation will happen.\r\n *\r\n * @returns The truncated string.\r\n */\r\nexport function truncate(str: string, limit: number, options?: TruncateOptions): string {\r\n // Early out if the string is already under the limit.\r\n if (str.length <= limit) {\r\n return str;\r\n }\r\n\r\n // All the whitespace characters that we can split on.\r\n const trimmable = \"\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF\";\r\n const reg = new RegExp(`(?=[${trimmable}])`);\r\n const words = str.split(reg);\r\n let count = 0;\r\n\r\n // If we are appending ellipsis, then shorten the limit size.\r\n if (options && options.ellipsis === true) {\r\n limit -= 3;\r\n }\r\n\r\n // Get a list of words that will fit within our length requirements.\r\n const visibleWords = words.filter(function (word) {\r\n count += word.length;\r\n return count <= limit;\r\n });\r\n\r\n return `${visibleWords.join(\"\")}...`;\r\n}\r\n\r\n/** The regular expression that contains the characters to be escaped. */\r\nconst escapeHtmlRegExp = /[\"'&<>]/g;\r\n\r\n/** The character map of the characters to be replaced and the strings to replace them with. */\r\nconst escapeHtmlMap: Record = {\r\n '\"': \""\",\r\n \"&\": \"&\",\r\n \"'\": \"'\",\r\n \"<\": \"<\",\r\n \">\": \">\"\r\n};\r\n\r\n/**\r\n * Escapes a string so it can be used in HTML. This turns things like the <\r\n * character into the < sequence so it will still render as \"<\".\r\n *\r\n * @param str The string to be escaped.\r\n * @returns A string that has all HTML entities escaped.\r\n */\r\nexport function escapeHtml(str: string): string {\r\n return str.replace(escapeHtmlRegExp, (ch) => {\r\n return escapeHtmlMap[ch];\r\n });\r\n}\r\n\r\n/**\r\n * The default compare value function for UI controls. This checks if both values\r\n * are GUIDs and if so does a case-insensitive compare, otherwise it does a\r\n * case-sensitive compare of the two values.\r\n *\r\n * @param value The value selected in the UI.\r\n * @param itemValue The item value to be compared against.\r\n *\r\n * @returns true if the two values are considered equal; otherwise false.\r\n */\r\nexport function defaultControlCompareValue(value: string, itemValue: string): boolean {\r\n const guidValue = toGuidOrNull(value);\r\n const guidItemValue = toGuidOrNull(itemValue);\r\n\r\n if (guidValue !== null && guidItemValue !== null) {\r\n return areEqual(guidValue, guidItemValue);\r\n }\r\n\r\n return value === itemValue;\r\n}\r\n\r\n\r\n\r\nexport default {\r\n asCommaAnd,\r\n escapeHtml,\r\n splitCamelCase,\r\n isNullOrWhiteSpace,\r\n isWhiteSpace,\r\n isEmpty,\r\n toTitleCase,\r\n pluralConditional,\r\n padLeft,\r\n padRight,\r\n truncate\r\n};\r\n","import { List } from \"./linq\";\r\nimport { padLeft, padRight } from \"./stringUtils\";\r\nimport { RockDateTime } from \"./rockDateTime\";\r\n\r\n/**\r\n * Returns a blank string if the string value is 0.\r\n *\r\n * @param value The value to check and return.\r\n * @returns The value passed in or an empty string if it equates to zero.\r\n */\r\nfunction blankIfZero(value: string): string {\r\n return parseInt(value) === 0 ? \"\" : value;\r\n}\r\n\r\n/**\r\n * Gets the 12 hour value of the given 24-hour number.\r\n *\r\n * @param hour The hour in a 24-hour format.\r\n * @returns The hour in a 12-hour format.\r\n */\r\nfunction get12HourValue(hour: number): number {\r\n if (hour == 0) {\r\n return 12;\r\n }\r\n else if (hour < 13) {\r\n return hour;\r\n }\r\n else {\r\n return hour - 12;\r\n }\r\n}\r\ntype DateFormatterCommand = (date: RockDateTime) => string;\r\n\r\nconst englishDayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\nconst englishMonthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n\r\nconst dateFormatters: Record = {\r\n \"yyyyy\": date => padLeft(date.year.toString(), 5, \"0\"),\r\n \"yyyy\": date => padLeft(date.year.toString(), 4, \"0\"),\r\n \"yyy\": date => padLeft(date.year.toString(), 3, \"0\"),\r\n \"yy\": date => padLeft((date.year % 100).toString(), 2, \"0\"),\r\n \"y\": date => (date.year % 100).toString(),\r\n\r\n \"MMMM\": date => englishMonthNames[date.month - 1],\r\n \"MMM\": date => englishMonthNames[date.month - 1].substr(0, 3),\r\n \"MM\": date => padLeft(date.month.toString(), 2, \"0\"),\r\n \"M\": date => date.month.toString(),\r\n\r\n \"dddd\": date => englishDayNames[date.dayOfWeek],\r\n \"ddd\": date => englishDayNames[date.dayOfWeek].substr(0, 3),\r\n \"dd\": date => padLeft(date.day.toString(), 2, \"0\"),\r\n \"d\": date => date.day.toString(),\r\n\r\n \"fffffff\": date => padRight((date.millisecond * 10000).toString(), 7, \"0\"),\r\n \"ffffff\": date => padRight((date.millisecond * 1000).toString(), 6, \"0\"),\r\n \"fffff\": date => padRight((date.millisecond * 100).toString(), 5, \"0\"),\r\n \"ffff\": date => padRight((date.millisecond * 10).toString(), 4, \"0\"),\r\n \"fff\": date => padRight(date.millisecond.toString(), 3, \"0\"),\r\n \"ff\": date => padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\"),\r\n \"f\": date => padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\"),\r\n\r\n \"FFFFFFF\": date => blankIfZero(padRight((date.millisecond * 10000).toString(), 7, \"0\")),\r\n \"FFFFFF\": date => blankIfZero(padRight((date.millisecond * 1000).toString(), 6, \"0\")),\r\n \"FFFFF\": date => blankIfZero(padRight((date.millisecond * 100).toString(), 5, \"0\")),\r\n \"FFFF\": date => blankIfZero(padRight((date.millisecond * 10).toString(), 4, \"0\")),\r\n \"FFF\": date => blankIfZero(padRight(date.millisecond.toString(), 3, \"0\")),\r\n \"FF\": date => blankIfZero(padRight(Math.floor(date.millisecond / 10).toString(), 2, \"0\")),\r\n \"F\": date => blankIfZero(padRight(Math.floor(date.millisecond / 100).toString(), 1, \"0\")),\r\n\r\n \"g\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\r\n \"gg\": date => date.year < 0 ? \"B.C.\" : \"A.D.\",\r\n\r\n \"hh\": date => padLeft(get12HourValue(date.hour).toString(), 2, \"0\"),\r\n \"h\": date => get12HourValue(date.hour).toString(),\r\n\r\n \"HH\": date => padLeft(date.hour.toString(), 2, \"0\"),\r\n \"H\": date => date.hour.toString(),\r\n\r\n \"mm\": date => padLeft(date.minute.toString(), 2, \"0\"),\r\n \"m\": date => date.minute.toString(),\r\n\r\n \"ss\": date => padLeft(date.second.toString(), 2, \"0\"),\r\n \"s\": date => date.second.toString(),\r\n\r\n \"K\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n const offsetMinute = Math.abs(offset % 60);\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\r\n },\r\n\r\n \"tt\": date => date.hour >= 12 ? \"PM\" : \"AM\",\r\n \"t\": date => date.hour >= 12 ? \"P\" : \"A\",\r\n\r\n \"zzz\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n const offsetMinute = Math.abs(offset % 60);\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}:${padLeft(offsetMinute.toString(), 2, \"0\")}`;\r\n },\r\n \"zz\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n return `${offset >= 0 ? \"+\" : \"-\"}${padLeft(offsetHour.toString(), 2, \"0\")}`;\r\n },\r\n \"z\": date => {\r\n const offset = date.offset;\r\n const offsetHour = Math.abs(Math.floor(offset / 60));\r\n return `${offset >= 0 ? \"+\" : \"-\"}${offsetHour}`;\r\n },\r\n\r\n \":\": () => \":\",\r\n \"/\": () => \"/\"\r\n};\r\n\r\nconst dateFormatterKeys = new List(Object.keys(dateFormatters))\r\n .orderByDescending(k => k.length)\r\n .toArray();\r\n\r\nconst standardDateFormats: Record = {\r\n \"d\": date => formatAspDate(date, \"M/d/yyyy\"),\r\n \"D\": date => formatAspDate(date, \"dddd, MMMM dd, yyyy\"),\r\n \"t\": date => formatAspDate(date, \"h:mm tt\"),\r\n \"T\": date => formatAspDate(date, \"h:mm:ss tt\"),\r\n \"M\": date => formatAspDate(date, \"MMMM dd\"),\r\n \"m\": date => formatAspDate(date, \"MMMM dd\"),\r\n \"Y\": date => formatAspDate(date, \"yyyy MMMM\"),\r\n \"y\": date => formatAspDate(date, \"yyyy MMMM\"),\r\n \"f\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"t\")}`,\r\n \"F\": date => `${formatAspDate(date, \"D\")} ${formatAspDate(date, \"T\")}`,\r\n \"g\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"t\")}`,\r\n \"G\": date => `${formatAspDate(date, \"d\")} ${formatAspDate(date, \"T\")}`,\r\n \"o\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\r\n \"O\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz`),\r\n \"r\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\r\n \"R\": date => formatAspDate(date, `ddd, dd MMM yyyy HH':'mm':'ss 'GMT'`),\r\n \"s\": date => formatAspDate(date, `yyyy'-'MM'-'dd'T'HH':'mm':'ss`),\r\n \"u\": date => formatAspDate(date, `yyyy'-'MM'-'dd HH':'mm':'ss'Z'`),\r\n \"U\": date => {\r\n return formatAspDate(date.universalDateTime, `F`);\r\n },\r\n};\r\n\r\n/**\r\n * Formats the Date object using custom format specifiers.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The custom format string.\r\n * @returns A string that represents the date in the specified format.\r\n */\r\nfunction formatAspCustomDate(date: RockDateTime, format: string): string {\r\n let result = \"\";\r\n\r\n for (let i = 0; i < format.length;) {\r\n let matchFound = false;\r\n\r\n for (const k of dateFormatterKeys) {\r\n if (format.substr(i, k.length) === k) {\r\n result += dateFormatters[k](date);\r\n matchFound = true;\r\n i += k.length;\r\n break;\r\n }\r\n }\r\n\r\n if (matchFound) {\r\n continue;\r\n }\r\n\r\n if (format[i] === \"\\\\\") {\r\n i++;\r\n if (i < format.length) {\r\n result += format[i++];\r\n }\r\n }\r\n else if (format[i] === \"'\") {\r\n i++;\r\n for (; i < format.length && format[i] !== \"'\"; i++) {\r\n result += format[i];\r\n }\r\n i++;\r\n }\r\n else if (format[i] === '\"') {\r\n i++;\r\n for (; i < format.length && format[i] !== '\"'; i++) {\r\n result += format[i];\r\n }\r\n i++;\r\n }\r\n else {\r\n result += format[i++];\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Formats the Date object using a standard format string.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The standard format specifier.\r\n * @returns A string that represents the date in the specified format.\r\n */\r\nfunction formatAspStandardDate(date: RockDateTime, format: string): string {\r\n if (standardDateFormats[format] !== undefined) {\r\n return standardDateFormats[format](date);\r\n }\r\n\r\n return format;\r\n}\r\n\r\n/**\r\n * Formats the given Date object using nearly the same rules as the ASP C#\r\n * format methods.\r\n *\r\n * @param date The date object to be formatted.\r\n * @param format The format string to use.\r\n */\r\nexport function formatAspDate(date: RockDateTime, format: string): string {\r\n if (format.length === 1) {\r\n return formatAspStandardDate(date, format);\r\n }\r\n else if (format.length === 2 && format[0] === \"%\") {\r\n return formatAspCustomDate(date, format[1]);\r\n }\r\n else {\r\n return formatAspCustomDate(date, format);\r\n }\r\n}\r\n","import { DateTime, FixedOffsetZone, Zone } from \"luxon\";\r\nimport { formatAspDate } from \"./aspDateFormat\";\r\nimport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\r\n\r\n/**\r\n * The days of the week that are used by RockDateTime.\r\n */\r\nexport { DayOfWeek } from \"@Obsidian/Enums/Controls/dayOfWeek\";\r\n\r\n/**\r\n * The various date and time formats supported by the formatting methods.\r\n */\r\nexport const DateTimeFormat: Record = {\r\n DateFull: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\"\r\n },\r\n\r\n DateMedium: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\"\r\n },\r\n\r\n DateShort: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\"\r\n },\r\n\r\n TimeShort: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n },\r\n\r\n TimeWithSeconds: {\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeShort: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeShortWithSeconds: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeMedium: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeMediumWithSeconds: {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n },\r\n\r\n DateTimeFull: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n },\r\n\r\n DateTimeFullWithSeconds: {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\"\r\n }\r\n};\r\n\r\n/**\r\n * A date and time object that handles time zones and formatting. This class is\r\n * immutable and cannot be modified. All modifications are performed by returning\r\n * a new RockDateTime instance.\r\n */\r\nexport class RockDateTime {\r\n /** The internal DateTime object that holds our date information. */\r\n private dateTime: DateTime;\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new instance of RockDateTime.\r\n *\r\n * @param dateTime The Luxon DateTime object that is used to track the internal state.\r\n */\r\n private constructor(dateTime: DateTime) {\r\n this.dateTime = dateTime;\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime from the given date and time parts.\r\n *\r\n * @param year The year of the new date.\r\n * @param month The month of the new date (1-12).\r\n * @param day The day of month of the new date.\r\n * @param hour The hour of the day.\r\n * @param minute The minute of the hour.\r\n * @param second The second of the minute.\r\n * @param millisecond The millisecond of the second.\r\n * @param zone The time zone offset to construct the date in.\r\n *\r\n * @returns A RockDateTime instance or null if the requested date was not valid.\r\n */\r\n public static fromParts(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number, zone?: number | string): RockDateTime | null {\r\n let luxonZone: Zone | string | undefined;\r\n\r\n if (zone !== undefined) {\r\n if (typeof zone === \"number\") {\r\n luxonZone = FixedOffsetZone.instance(zone);\r\n }\r\n else {\r\n luxonZone = zone;\r\n }\r\n }\r\n\r\n const dateTime = DateTime.fromObject({\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond\r\n }, {\r\n zone: luxonZone\r\n });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime that represents the time specified\r\n * as the Javascript milliseconds value. The time zone is set to the browser\r\n * time zone.\r\n *\r\n * @param milliseconds The time in milliseconds since the epoch.\r\n *\r\n * @returns A new RockDateTime instance or null if the specified date was not valid.\r\n */\r\n public static fromMilliseconds(milliseconds: number): RockDateTime | null {\r\n const dateTime = DateTime.fromMillis(milliseconds);\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Construct a new RockDateTime instance from a Javascript Date object.\r\n *\r\n * @param date The Javascript date object that contains the date information.\r\n *\r\n * @returns A RockDateTime instance or null if the date was not valid.\r\n */\r\n public static fromJSDate(date: Date): RockDateTime | null {\r\n const dateTime = DateTime.fromJSDate(date);\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Constructs a new RockDateTime instance by parsing the given string from\r\n * ISO 8601 format.\r\n *\r\n * @param dateString The string that contains the ISO 8601 formatted text.\r\n *\r\n * @returns A new RockDateTime instance or null if the date was not valid.\r\n */\r\n public static parseISO(dateString: string): RockDateTime | null {\r\n const dateTime = DateTime.fromISO(dateString, { setZone: true });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Constructs a new RockDateTime instance by parsing the given string from\r\n * RFC 1123 format. This is common in HTTP headers.\r\n *\r\n * @param dateString The string that contains the RFC 1123 formatted text.\r\n *\r\n * @returns A new RockDateTime instance or null if the date was not valid.\r\n */\r\n public static parseHTTP(dateString: string): RockDateTime | null {\r\n const dateTime = DateTime.fromHTTP(dateString, { setZone: true });\r\n\r\n if (!dateTime.isValid) {\r\n return null;\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the current date and time.\r\n *\r\n * @returns A RockDateTime instance.\r\n */\r\n public static now(): RockDateTime {\r\n return new RockDateTime(DateTime.now());\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the current time in UTC.\r\n *\r\n * @returns A new RockDateTime instance in the UTC time zone.\r\n */\r\n public static utcNow(): RockDateTime {\r\n return new RockDateTime(DateTime.now().toUTC());\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Properties\r\n\r\n /**\r\n * The Date portion of this RockDateTime instance. All time properties of\r\n * the returned instance will be set to 0.\r\n */\r\n public get date(): RockDateTime {\r\n const date = RockDateTime.fromParts(this.year, this.month, this.day, 0, 0, 0, 0, this.offset);\r\n\r\n if (date === null) {\r\n throw \"Could not convert to date instance.\";\r\n }\r\n\r\n return date;\r\n }\r\n\r\n /**\r\n * The day of the month represented by this instance.\r\n */\r\n public get day(): number {\r\n return this.dateTime.day;\r\n }\r\n\r\n /**\r\n * The day of the week represented by this instance.\r\n */\r\n public get dayOfWeek(): DayOfWeek {\r\n switch (this.dateTime.weekday) {\r\n case 1:\r\n return DayOfWeek.Monday;\r\n\r\n case 2:\r\n return DayOfWeek.Tuesday;\r\n\r\n case 3:\r\n return DayOfWeek.Wednesday;\r\n\r\n case 4:\r\n return DayOfWeek.Thursday;\r\n\r\n case 5:\r\n return DayOfWeek.Friday;\r\n\r\n case 6:\r\n return DayOfWeek.Saturday;\r\n\r\n case 7:\r\n return DayOfWeek.Sunday;\r\n }\r\n\r\n throw \"Could not determine day of week.\";\r\n }\r\n\r\n /**\r\n * The day of the year represented by this instance.\r\n */\r\n public get dayOfYear(): number {\r\n return this.dateTime.year;\r\n }\r\n\r\n /**\r\n * The hour of the day represented by this instance.\r\n */\r\n public get hour(): number {\r\n return this.dateTime.hour;\r\n }\r\n\r\n /**\r\n * The millisecond of the second represented by this instance.\r\n */\r\n public get millisecond(): number {\r\n return this.dateTime.millisecond;\r\n }\r\n\r\n /**\r\n * The minute of the hour represented by this instance.\r\n */\r\n public get minute(): number {\r\n return this.dateTime.minute;\r\n }\r\n\r\n /**\r\n * The month of the year represented by this instance (1-12).\r\n */\r\n public get month(): number {\r\n return this.dateTime.month;\r\n }\r\n\r\n /**\r\n * The offset from UTC represented by this instance. If the timezone of this\r\n * instance is UTC-7 then the value returned is -420.\r\n */\r\n public get offset(): number {\r\n return this.dateTime.offset;\r\n }\r\n\r\n /**\r\n * The second of the minute represented by this instance.\r\n */\r\n public get second(): number {\r\n return this.dateTime.second;\r\n }\r\n\r\n /**\r\n * The year represented by this instance.\r\n */\r\n public get year(): number {\r\n return this.dateTime.year;\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in the local browser time zone.\r\n */\r\n public get localDateTime(): RockDateTime {\r\n return new RockDateTime(this.dateTime.toLocal());\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in the organization time zone.\r\n */\r\n public get organizationDateTime(): RockDateTime {\r\n throw \"Not Implemented\";\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the same point in\r\n * time represented in UTC.\r\n */\r\n public get universalDateTime(): RockDateTime {\r\n return new RockDateTime(this.dateTime.toUTC());\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Methods\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of days to this instance.\r\n *\r\n * @param days The number of days to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addDays(days: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ days: days });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of hours to this instance.\r\n *\r\n * @param days The number of hours to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addHours(hours: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ hours: hours });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of milliseconds to this instance.\r\n *\r\n * @param days The number of milliseconds to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMilliseconds(milliseconds: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ milliseconds: milliseconds });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of minutes to this instance.\r\n *\r\n * @param days The number of minutes to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMinutes(minutes: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ minutes: minutes });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of months to this instance.\r\n *\r\n * @param days The number of months to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addMonths(months: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ months: months });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of seconds to this instance.\r\n *\r\n * @param days The number of seconds to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addSeconds(seconds: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ seconds: seconds });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Creates a new RockDateTime instance that represents the date and time\r\n * after adding the number of years to this instance.\r\n *\r\n * @param days The number of years to add.\r\n *\r\n * @returns A new instance of RockDateTime that represents the new date and time.\r\n */\r\n public addYears(years: number): RockDateTime {\r\n const dateTime = this.dateTime.plus({ years: years });\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Operation produced an invalid date.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Converts the date time representation into the number of milliseconds\r\n * that have elapsed since the epoch (1970-01-01T00:00:00Z).\r\n *\r\n * @returns The number of milliseconds since the epoch.\r\n */\r\n public toMilliseconds(): number {\r\n return this.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Creates a new instance of RockDateTime that represents the same point\r\n * in time as represented by the specified time zone offset.\r\n *\r\n * @param zone The time zone offset as a number or string such as \"UTC+4\".\r\n *\r\n * @returns A new RockDateTime instance that represents the specified time zone.\r\n */\r\n public toOffset(zone: number | string): RockDateTime {\r\n let dateTime: DateTime;\r\n\r\n if (typeof zone === \"number\") {\r\n dateTime = this.dateTime.setZone(FixedOffsetZone.instance(zone));\r\n }\r\n else {\r\n dateTime = this.dateTime.setZone(zone);\r\n }\r\n\r\n if (!dateTime.isValid) {\r\n throw \"Invalid time zone specified.\";\r\n }\r\n\r\n return new RockDateTime(dateTime);\r\n }\r\n\r\n /**\r\n * Formats this instance according to C# formatting rules.\r\n *\r\n * @param format The string that specifies the format to use.\r\n *\r\n * @returns A string representing this instance in the given format.\r\n */\r\n public toASPString(format: string): string {\r\n return formatAspDate(this, format);\r\n }\r\n\r\n /**\r\n * Creates a string representation of this instance in ISO8601 format.\r\n *\r\n * @returns An ISO8601 formatted string.\r\n */\r\n public toISOString(): string {\r\n return this.dateTime.toISO();\r\n }\r\n\r\n /**\r\n * Formats this instance using standard locale formatting rules to display\r\n * a date and time in the browsers specified locale.\r\n *\r\n * @param format The format to use when generating the string.\r\n *\r\n * @returns A string that represents the date and time in then specified format.\r\n */\r\n public toLocaleString(format: Intl.DateTimeFormatOptions): string {\r\n return this.dateTime.toLocaleString(format);\r\n }\r\n\r\n /**\r\n * Transforms the date into a human friendly elapsed time string.\r\n *\r\n * @example\r\n * // Returns \"21yrs\"\r\n * RockDateTime.fromParts(2000, 3, 4).toElapsedString();\r\n *\r\n * @returns A string that represents the amount of time that has elapsed.\r\n */\r\n public toElapsedString(): string {\r\n const now = RockDateTime.now();\r\n const msPerHour = 1000 * 60 * 60;\r\n const hoursPerDay = 24;\r\n const daysPerMonth = 30.4167;\r\n const daysPerYear = 365.25;\r\n\r\n const totalMs = Math.abs(now.toMilliseconds() - this.toMilliseconds());\r\n const totalHours = totalMs / msPerHour;\r\n const totalDays = totalHours / hoursPerDay;\r\n\r\n if (totalDays < 2) {\r\n return \"1day\";\r\n }\r\n\r\n if (totalDays < 31) {\r\n return `${Math.floor(totalDays)}days`;\r\n }\r\n\r\n const totalMonths = totalDays / daysPerMonth;\r\n\r\n if (totalMonths <= 1) {\r\n return \"1mon\";\r\n }\r\n\r\n if (totalMonths <= 18) {\r\n return `${Math.round(totalMonths)}mon`;\r\n }\r\n\r\n const totalYears = totalDays / daysPerYear;\r\n\r\n if (totalYears <= 1) {\r\n return \"1yr\";\r\n }\r\n\r\n return `${Math.round(totalYears)}yrs`;\r\n }\r\n\r\n /**\r\n * Formats this instance as a string that can be used in HTTP headers and\r\n * cookies.\r\n *\r\n * @returns A new string that conforms to RFC 1123\r\n */\r\n public toHTTPString(): string {\r\n return this.dateTime.toHTTP();\r\n }\r\n\r\n /**\r\n * Get the value of the date and time in a format that can be used in\r\n * comparisons.\r\n *\r\n * @returns A number that represents the date and time.\r\n */\r\n public valueOf(): number {\r\n return this.dateTime.valueOf();\r\n }\r\n\r\n /**\r\n * Creates a standard string representation of the date and time.\r\n *\r\n * @returns A string representation of the date and time.\r\n */\r\n public toString(): string {\r\n return this.toLocaleString(DateTimeFormat.DateTimeFull);\r\n }\r\n\r\n /**\r\n * Checks if this instance is equal to another RockDateTime instance. This\r\n * will return true if the two instances represent the same point in time,\r\n * even if they have been associated with different time zones. In other\r\n * words \"2021-09-08 12:00:00 Z\" == \"2021-09-08 14:00:00 UTC+2\".\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if the two instances represent the same point in time.\r\n */\r\n public isEqualTo(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() === otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Checks if this instance is later than another RockDateTime instance.\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if this instance represents a point in time that occurred after another point in time, regardless of time zone.\r\n */\r\n public isLaterThan(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() > otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n /**\r\n * Checks if this instance is earlier than another RockDateTime instance.\r\n *\r\n * @param otherDateTime The other RockDateTime to be compared against.\r\n *\r\n * @returns True if this instance represents a point in time that occurred before another point in time, regardless of time zone.\r\n */\r\n public isEarlierThan(otherDateTime: RockDateTime): boolean {\r\n return this.dateTime.toMillis() < otherDateTime.dateTime.toMillis();\r\n }\r\n\r\n // #endregion\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { BlockEvent, InvokeBlockActionFunc, SecurityGrant } from \"@Obsidian/Types/Utility/block\";\r\nimport { ExtendedRef } from \"@Obsidian/Types/Utility/component\";\r\nimport { DetailBlockBox } from \"@Obsidian/ViewModels/Blocks/detailBlockBox\";\r\nimport { inject, provide, Ref, ref, watch } from \"vue\";\r\nimport { RockDateTime } from \"./rockDateTime\";\r\nimport { Guid } from \"@Obsidian/Types\";\r\n\r\nconst blockReloadSymbol = Symbol();\r\nconst configurationValuesChangedSymbol = Symbol();\r\n\r\n// TODO: Change these to use symbols\r\n\r\n/**\r\n * Maps the block configuration values to the expected type.\r\n *\r\n * @returns The configuration values for the block.\r\n */\r\nexport function useConfigurationValues(): T {\r\n const result = inject>(\"configurationValues\");\r\n\r\n if (result === undefined) {\r\n throw \"Attempted to access block configuration outside of a RockBlock.\";\r\n }\r\n\r\n return result.value;\r\n}\r\n\r\n/**\r\n * Gets the function that will be used to invoke block actions.\r\n *\r\n * @returns An instance of @see {@link InvokeBlockActionFunc}.\r\n */\r\nexport function useInvokeBlockAction(): InvokeBlockActionFunc {\r\n const result = inject(\"invokeBlockAction\");\r\n\r\n if (result === undefined) {\r\n throw \"Attempted to access block action invocation outside of a RockBlock.\";\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Provides the reload block callback function for a block. This is an internal\r\n * method and should not be used by plugins.\r\n *\r\n * @param callback The callback that will be called when a block wants to reload itself.\r\n */\r\nexport function provideReloadBlock(callback: () => void): void {\r\n provide(blockReloadSymbol, callback);\r\n}\r\n\r\n/**\r\n * Gets a function that can be called when a block wants to reload itself.\r\n *\r\n * @returns A function that will cause the block component to be reloaded.\r\n */\r\nexport function useReloadBlock(): () => void {\r\n return inject<() => void>(blockReloadSymbol, () => {\r\n // Intentionally blank, do nothing by default.\r\n });\r\n}\r\n\r\n/**\r\n * Provides the data for a block to be notified when its configuration values\r\n * have changed. This is an internal method and should not be used by plugins.\r\n *\r\n * @returns An object with an invoke and reset function.\r\n */\r\nexport function provideConfigurationValuesChanged(): { invoke: () => void, reset: () => void } {\r\n const callbacks: (() => void)[] = [];\r\n\r\n provide(configurationValuesChangedSymbol, callbacks);\r\n\r\n return {\r\n invoke: (): void => {\r\n for (const c of callbacks) {\r\n c();\r\n }\r\n },\r\n\r\n reset: (): void => {\r\n callbacks.splice(0, callbacks.length);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Registered a function to be called when the block configuration values have\r\n * changed.\r\n *\r\n * @param callback The function to be called when the configuration values have changed.\r\n */\r\nexport function onConfigurationValuesChanged(callback: () => void): void {\r\n const callbacks = inject<(() => void)[]>(configurationValuesChangedSymbol);\r\n\r\n if (callbacks !== undefined) {\r\n callbacks.push(callback);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * A type that returns the keys of a child property.\r\n */\r\ntype ChildKeys, PropertyName extends string> = keyof NonNullable & string;\r\n\r\n/**\r\n * A valid properties box that uses the specified name for the content bag.\r\n */\r\ntype ValidPropertiesBox = {\r\n validProperties?: string[] | null;\r\n} & {\r\n [P in PropertyName]?: Record | null;\r\n};\r\n\r\n/**\r\n * Sets the a value for a custom settings box. This will set the value and then\r\n * add the property name to the list of valid properties.\r\n *\r\n * @param box The box whose custom setting value will be set.\r\n * @param propertyName The name of the custom setting property to set.\r\n * @param value The new value of the custom setting.\r\n */\r\nexport function setCustomSettingsBoxValue, S extends NonNullable, K extends ChildKeys>(box: T, propertyName: K, value: S[K]): void {\r\n if (!box.settings) {\r\n box.settings = {} as Record;\r\n }\r\n\r\n box.settings[propertyName] = value;\r\n\r\n if (!box.validProperties) {\r\n box.validProperties = [];\r\n }\r\n\r\n if (!box.validProperties.includes(propertyName)) {\r\n box.validProperties.push(propertyName);\r\n }\r\n}\r\n\r\n/**\r\n * Sets the a value for a property box. This will set the value and then\r\n * add the property name to the list of valid properties.\r\n *\r\n * @param box The box whose property value will be set.\r\n * @param propertyName The name of the property on the bag to set.\r\n * @param value The new value of the property.\r\n */\r\n export function setPropertiesBoxValue, S extends NonNullable, K extends ChildKeys>(box: T, propertyName: K, value: S[K]): void {\r\n if (!box.bag) {\r\n box.bag = {} as Record;\r\n }\r\n\r\n box.bag[propertyName] = value;\r\n\r\n if (!box.validProperties) {\r\n box.validProperties = [];\r\n }\r\n\r\n if (!box.validProperties.includes(propertyName)) {\r\n box.validProperties.push(propertyName);\r\n }\r\n}\r\n\r\n/**\r\n * Dispatches a block event to the document.\r\n *\r\n * @param eventName The name of the event to be dispatched.\r\n * @param eventData The custom data to be attached to the event.\r\n *\r\n * @returns true if preventDefault() was called on the event, otherwise false.\r\n */\r\nexport function dispatchBlockEvent(eventName: string, blockGuid: Guid, eventData?: unknown): boolean {\r\n const ev = new CustomEvent(eventName, {\r\n cancelable: true,\r\n detail: {\r\n guid: blockGuid,\r\n data: eventData\r\n }\r\n });\r\n\r\n return document.dispatchEvent(ev);\r\n}\r\n\r\n/**\r\n * Tests if the given event is a custom block event. This does not ensure\r\n * that the event data is the correct type, only the event itself.\r\n *\r\n * @param event The event to be tested.\r\n *\r\n * @returns true if the event is a block event.\r\n */\r\nexport function isBlockEvent(event: Event): event is CustomEvent> {\r\n return \"guid\" in event && \"data\" in event;\r\n}\r\n\r\n\r\n// #region Security Grants\r\n\r\nconst securityGrantSymbol = Symbol();\r\n\r\n/**\r\n * Use a security grant token value provided by the server. This returns a reference\r\n * to the actual value and will automatically handle renewing the token and updating\r\n * the value. This function is meant to be used by blocks. Controls should use the\r\n * useSecurityGrant() function instead.\r\n *\r\n * @param token The token provided by the server.\r\n *\r\n * @returns A reference to the security grant that will be updated automatically when it has been renewed.\r\n */\r\nexport function getSecurityGrant(token: string | null | undefined): SecurityGrant {\r\n // Use || so that an empty string gets converted to null.\r\n const tokenRef = ref(token || null);\r\n const invokeBlockAction = useInvokeBlockAction();\r\n let renewalTimeout: NodeJS.Timeout | null = null;\r\n\r\n // Internal function to renew the token and re-schedule renewal.\r\n const renewToken = async (): Promise => {\r\n const result = await invokeBlockAction(\"RenewSecurityGrantToken\");\r\n\r\n if (result.isSuccess && result.data) {\r\n tokenRef.value = result.data;\r\n\r\n scheduleRenewal();\r\n }\r\n };\r\n\r\n // Internal function to schedule renewal based on the expiration date in\r\n // the existing token. Renewal happens 15 minutes before expiration.\r\n const scheduleRenewal = (): void => {\r\n // Cancel any existing renewal timer.\r\n if (renewalTimeout !== null) {\r\n clearTimeout(renewalTimeout);\r\n renewalTimeout = null;\r\n }\r\n\r\n // No token, nothing to do.\r\n if (tokenRef.value === null) {\r\n return;\r\n }\r\n\r\n const segments = tokenRef.value?.split(\";\");\r\n\r\n // Token not in expected format.\r\n if (segments.length !== 3 || segments[0] !== \"1\") {\r\n return;\r\n }\r\n\r\n const expiresDateTime = RockDateTime.parseISO(segments[1]);\r\n\r\n // Could not parse expiration date and time.\r\n if (expiresDateTime === null) {\r\n return;\r\n }\r\n\r\n const renewTimeout = expiresDateTime.addMinutes(-15).toMilliseconds() - RockDateTime.now().toMilliseconds();\r\n\r\n // Renewal request would be in the past, ignore.\r\n if (renewTimeout < 0) {\r\n return;\r\n }\r\n\r\n // Schedule the renewal task to happen 15 minutes before expiration.\r\n renewalTimeout = setTimeout(renewToken, renewTimeout);\r\n };\r\n\r\n scheduleRenewal();\r\n\r\n return {\r\n token: tokenRef,\r\n updateToken(newToken) {\r\n tokenRef.value = newToken || null;\r\n scheduleRenewal();\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Provides the security grant to child components to use in their API calls.\r\n *\r\n * @param grant The grant ot provide to child components.\r\n */\r\nexport function provideSecurityGrant(grant: SecurityGrant): void {\r\n provide(securityGrantSymbol, grant);\r\n}\r\n\r\n/**\r\n * Uses a previously provided security grant token by a parent component.\r\n * This function is meant to be used by controls that need to obtain a security\r\n * grant from a parent component.\r\n *\r\n * @returns A string reference that contains the security grant token.\r\n */\r\nexport function useSecurityGrantToken(): Ref {\r\n const grant = inject(securityGrantSymbol);\r\n\r\n return grant ? grant.token : ref(null);\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Extended References\r\n\r\n/** An emit object that conforms to having a propertyChanged event. */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport type PropertyChangedEmitFn = E extends Array ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\r\n\r\n/**\r\n * Watches for changes to the given Ref objects and emits a special event to\r\n * indicate that a given property has changed.\r\n *\r\n * @param propertyRefs The ExtendedRef objects to watch for changes.\r\n * @param emit The emit function for the component.\r\n */\r\nexport function watchPropertyChanges(propertyRefs: ExtendedRef[], emit: PropertyChangedEmitFn): void {\r\n for (const propRef of propertyRefs) {\r\n watch(propRef, () => {\r\n if (propRef.context.propertyName) {\r\n emit(\"propertyChanged\", propRef.context.propertyName);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Requests an updated attribute list from the server based on the\r\n * current UI selections made.\r\n *\r\n * @param bag The entity bag that will be used to determine current property values\r\n * and then updated with the new attributes and values.\r\n * @param validProperties The properties that are considered valid on the bag when\r\n * the server will read the bag.\r\n * @param invokeBlockAction The function to use when calling the block action.\r\n */\r\nexport async function refreshDetailAttributes(bag: Ref, validProperties: string[], invokeBlockAction: InvokeBlockActionFunc): Promise {\r\n const data: DetailBlockBox = {\r\n entity: bag.value,\r\n isEditable: true,\r\n validProperties: validProperties\r\n };\r\n\r\n const result = await invokeBlockAction, unknown>>(\"RefreshAttributes\", {\r\n box: data\r\n });\r\n\r\n if (result.isSuccess) {\r\n if (result.statusCode === 200 && result.data && bag.value) {\r\n const newBag: TEntityBag = {\r\n ...bag.value,\r\n attributes: result.data.entity?.attributes,\r\n attributeValues: result.data.entity?.attributeValues\r\n };\r\n\r\n bag.value = newBag;\r\n }\r\n }\r\n}\r\n\r\n// #endregion Extended Refs\r\n\r\n// #region Block Guid\r\n\r\nconst blockGuidSymbol = Symbol(\"block-guid\");\r\n\r\n/**\r\n * Provides the block unique identifier to all child components.\r\n * This is an internal method and should not be used by plugins.\r\n *\r\n * @param blockGuid The unique identifier of the block.\r\n */\r\nexport function provideBlockGuid(blockGuid: string): void {\r\n provide(blockGuidSymbol, blockGuid);\r\n}\r\n\r\n/**\r\n * Gets the unique identifier of the current block in this component chain.\r\n *\r\n * @returns The unique identifier of the block.\r\n */\r\nexport function useBlockGuid(): Guid | undefined {\r\n return inject(blockGuidSymbol);\r\n}\r\n\r\n// #endregion\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Transform the value into true, false, or null\r\n * @param val\r\n */\r\nexport function asBooleanOrNull(val: unknown): boolean | null {\r\n if (val === undefined || val === null) {\r\n return null;\r\n }\r\n\r\n if (typeof val === \"boolean\") {\r\n return val;\r\n }\r\n\r\n if (typeof val === \"string\") {\r\n const asString = (val || \"\").trim().toLowerCase();\r\n\r\n if (!asString) {\r\n return null;\r\n }\r\n\r\n return [\"true\", \"yes\", \"t\", \"y\", \"1\"].indexOf(asString) !== -1;\r\n }\r\n\r\n if (typeof val === \"number\") {\r\n return !!val;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Transform the value into true or false\r\n * @param val\r\n */\r\nexport function asBoolean(val: unknown): boolean {\r\n return !!asBooleanOrNull(val);\r\n}\r\n\r\n/** Transform the value into the strings \"Yes\", \"No\", or null */\r\nexport function asYesNoOrNull(val: unknown): \"Yes\" | \"No\" | null {\r\n const boolOrNull = asBooleanOrNull(val);\r\n\r\n if (boolOrNull === null) {\r\n return null;\r\n }\r\n\r\n return boolOrNull ? \"Yes\" : \"No\";\r\n}\r\n\r\n/** Transform the value into the strings \"True\", \"False\", or null */\r\nexport function asTrueFalseOrNull(val: unknown): | \"True\" | \"False\" | null {\r\n const boolOrNull = asBooleanOrNull(val);\r\n\r\n if (boolOrNull === null) {\r\n return null;\r\n }\r\n\r\n return boolOrNull ? \"True\" : \"False\";\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\nimport mitt from \"mitt\";\r\nimport { RockDateTime } from \"./rockDateTime\";\r\n\r\n/**\r\n * The bus allows page components to send and receive arbitrary data from other page components.\r\n */\r\ntype LogItem = {\r\n date: RockDateTime;\r\n message: string;\r\n};\r\n\r\nconst bus = mitt();\r\nconst log: LogItem[] = [];\r\n\r\n/**\r\n* Write a log entry that a payload was sent or received.\r\n*/\r\nconst writeLog = (msg: string): void => {\r\n log.push({\r\n date: RockDateTime.now(),\r\n message: msg\r\n });\r\n};\r\n\r\n/**\r\n* Send the payload to subscribers listening for the event name\r\n*/\r\nfunction publish(eventName: string, payload: T): void {\r\n writeLog(`Published ${eventName}`);\r\n bus.emit(eventName, payload);\r\n}\r\n\r\n/**\r\n* Whenever an event is received of eventName, the callback is executed with the message\r\n* payload as a parameter.\r\n*/\r\nfunction subscribe(eventName: string, callback: (payload: T) => void): void {\r\n writeLog(`Subscribed to ${eventName}`);\r\n bus.on(eventName, payload => {\r\n if (payload) {\r\n callback(payload);\r\n }\r\n });\r\n}\r\n\r\nexport default {\r\n publish,\r\n subscribe,\r\n log\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { RockDateTime } from \"./rockDateTime\";\r\n\r\n//\r\ntype CacheEntry = {\r\n value: T;\r\n expiration: number;\r\n};\r\n\r\n/**\r\n* Stores the value using the given key. The cache will expire at the expiration or in\r\n* 1 minute if none is provided\r\n* @param key\r\n* @param value\r\n* @param expiration\r\n*/\r\nfunction set(key: string, value: T, expirationDT: RockDateTime | null = null): void {\r\n let expiration: number;\r\n\r\n if (expirationDT) {\r\n expiration = expirationDT.toMilliseconds();\r\n }\r\n else {\r\n // Default to one minute\r\n expiration = RockDateTime.now().addMinutes(1).toMilliseconds();\r\n }\r\n\r\n const cache: CacheEntry = { expiration, value };\r\n const cacheJson = JSON.stringify(cache);\r\n sessionStorage.setItem(key, cacheJson);\r\n}\r\n\r\n/**\r\n * Gets a stored cache value if there is one that has not yet expired.\r\n * @param key\r\n */\r\nfunction get(key: string): T | null {\r\n const cacheJson = sessionStorage.getItem(key);\r\n\r\n if (!cacheJson) {\r\n return null;\r\n }\r\n\r\n const cache = JSON.parse(cacheJson) as CacheEntry;\r\n\r\n if (!cache || !cache.expiration) {\r\n return null;\r\n }\r\n\r\n if (cache.expiration < RockDateTime.now().toMilliseconds()) {\r\n return null;\r\n }\r\n\r\n return cache.value;\r\n}\r\n\r\nconst promiseCache: Record | undefined> = {};\r\n\r\n/**\r\n * Since Promises can't be cached, we need to store them in memory until we get the result back. This wraps\r\n * a function in another function that returns a promise and...\r\n * - If there's a cached result, return it\r\n * - Otherwise if there's a cached Promise, return it\r\n * - Otherwise call the given function and cache it's promise and return it. Once the the Promise resolves, cache its result\r\n *\r\n * @param key Key for identifying the cached values\r\n * @param fn Function that returns a Promise that we want to cache the value of\r\n *\r\n */\r\nfunction cachePromiseFactory(key: string, fn: () => Promise, expiration: RockDateTime | null = null): () => Promise {\r\n return async function (): Promise {\r\n // If it's cached, grab it\r\n const cachedResult = get(key);\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n\r\n // If it's not cached yet but we've already started fetching it\r\n // (it's not cached until we receive the results), return the existing Promise\r\n if (promiseCache[key]) {\r\n return promiseCache[key] as Promise;\r\n }\r\n\r\n // Not stored anywhere, so fetch it and save it on the stored Promise for the next call\r\n promiseCache[key] = fn();\r\n\r\n // Once it's resolved, cache the result\r\n promiseCache[key]?.then((result) => {\r\n set(key, result, expiration);\r\n delete promiseCache[key];\r\n return result;\r\n }).catch((e: Error) => {\r\n // Something's wrong, let's get rid of the stored promise, so we can try again.\r\n delete promiseCache[key];\r\n throw e;\r\n });\r\n\r\n return promiseCache[key] as Promise;\r\n };\r\n}\r\n\r\n\r\nexport default {\r\n set,\r\n get,\r\n cachePromiseFactory: cachePromiseFactory\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Compares two values for equality by performing deep nested comparisons\r\n * if the values are objects or arrays.\r\n * \r\n * @param a The first value to compare.\r\n * @param b The second value to compare.\r\n * @param strict True if strict comparision is required (meaning 1 would not equal \"1\").\r\n *\r\n * @returns True if the two values are equal to each other.\r\n */\r\nexport function deepEqual(a: unknown, b: unknown, strict: boolean): boolean {\r\n // Catches everything but objects.\r\n if (strict && a === b) {\r\n return true;\r\n }\r\n else if (!strict && a == b) {\r\n return true;\r\n }\r\n\r\n // NaN never equals another NaN, but functionally they are the same.\r\n if (typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b)) {\r\n return true;\r\n }\r\n\r\n // Remaining value types must both be of type object\r\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\r\n // Array status must match.\r\n if (Array.isArray(a) !== Array.isArray(b)) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n // Array lengths must match.\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n // Each element in the array must match.\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], strict)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n else {\r\n // NOTE: There are a few edge cases not accounted for here, but they\r\n // are rare and unusual:\r\n // Map, Set, ArrayBuffer, RegExp\r\n\r\n // The objects must be of the same \"object type\".\r\n if (a.constructor !== b.constructor) {\r\n return false;\r\n }\r\n\r\n // Get all the key/value pairs of each object and sort them so they\r\n // are in the same order as each other.\r\n const aEntries = Object.entries(a).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\r\n const bEntries = Object.entries(b).sort((a, b) => a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));\r\n\r\n // Key/value count must be identical.\r\n if (aEntries.length !== bEntries.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < aEntries.length; i++) {\r\n const aEntry = aEntries[i];\r\n const bEntry = bEntries[i];\r\n\r\n // Ensure the keys are equal, must always be strict.\r\n if (!deepEqual(aEntry[0], bEntry[0], true)) {\r\n return false;\r\n }\r\n\r\n // Ensure the values are equal.\r\n if (!deepEqual(aEntry[1], bEntry[1], strict)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\r\n/**\r\n * Debounces the function so it will only be called once during the specified\r\n * delay period. The returned function should be called to trigger the original\r\n * function that is to be debounced.\r\n * \r\n * @param fn The function to be called once per delay period.\r\n * @param delay The period in milliseconds. If the returned function is called\r\n * more than once during this period then fn will only be executed once for\r\n * the period. If not specified then it defaults to 250ms.\r\n * @param eager If true then the fn function will be called immediately and\r\n * then any subsequent calls will be debounced.\r\n *\r\n * @returns A function to be called when fn should be executed.\r\n */\r\nexport function debounce(fn: (() => void), delay: number = 250, eager: boolean = false): (() => void) {\r\n let timeout: NodeJS.Timeout | null = null;\r\n\r\n return (): void => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n else if (eager) {\r\n // If there was no previous timeout and we are configured for\r\n // eager calls, then execute now.\r\n fn();\r\n\r\n // An eager call should not result in a final debounce call.\r\n timeout = setTimeout(() => timeout = null, delay);\r\n\r\n return;\r\n }\r\n\r\n // If we had a previous timeout or we are not set for eager calls\r\n // then set a timeout to initiate the function after the delay.\r\n timeout = setTimeout(() => {\r\n timeout = null;\r\n fn();\r\n }, delay);\r\n };\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { newGuid } from \"./guid\";\r\nimport { inject, nextTick, provide } from \"vue\";\r\n\r\nconst suspenseSymbol = Symbol(\"RockSuspense\");\r\n\r\n/**\r\n * Defines the interface for a provider of suspense monitoring. These are used\r\n * to track asynchronous operations that components may be performing so the\r\n * watching component can perform an operation once all pending operations\r\n * have completed.\r\n */\r\nexport interface ISuspenseProvider {\r\n /**\r\n * Adds a new operation identified by the promise. When the promise\r\n * either resolves or fails the operation is considered completed.\r\n *\r\n * @param operation The promise that represents the operation.\r\n */\r\n addOperation(operation: Promise): void;\r\n\r\n /**\r\n * Notes that an asynchronous operation has started on a child component.\r\n *\r\n * @param key The key that identifies the operation.\r\n */\r\n startAsyncOperation(key: Guid): void;\r\n\r\n /**\r\n * Notes that an asynchrounous operation has completed on a child component.\r\n *\r\n * @param key The key that was previously passed to startAsyncOperation.\r\n */\r\n completeAsyncOperation(key: Guid): void;\r\n}\r\n\r\n/**\r\n * A basic provider that handles the guts of a suspense provider. This can be\r\n * used by components that need to know when child components have completed\r\n * their work.\r\n */\r\nexport class BasicSuspenseProvider implements ISuspenseProvider {\r\n private readonly operationKey: Guid;\r\n\r\n private readonly parentProvider: ISuspenseProvider | undefined;\r\n\r\n private readonly pendingOperations: Guid[];\r\n\r\n private finishedHandlers: (() => void)[];\r\n\r\n /**\r\n * Creates a new suspense provider.\r\n *\r\n * @param parentProvider The parent suspense provider that will be notified of pending operations.\r\n */\r\n constructor(parentProvider: ISuspenseProvider | undefined) {\r\n this.operationKey = newGuid();\r\n this.parentProvider = parentProvider;\r\n this.pendingOperations = [];\r\n this.finishedHandlers = [];\r\n }\r\n\r\n /**\r\n * Called when all pending operations are complete. Notifies all handlers\r\n * that the pending operations have completed as well as the parent provider.\r\n */\r\n private allOperationsComplete(): void {\r\n // Wait until the next Vue tick in case a new async operation started.\r\n // This can happen, for example, with defineAsyncComponent(). It will\r\n // complete its async operation (loading the JS file) and then the\r\n // component defined in the file might start an async operation. This\r\n // prevents us from completing too soon.\r\n nextTick(() => {\r\n // Verify nothing started a new asynchronous operation while we\r\n // we waiting for the next tick.\r\n if (this.pendingOperations.length !== 0) {\r\n return;\r\n }\r\n\r\n // Notify all pending handlers that all operations completed.\r\n for (const handler of this.finishedHandlers) {\r\n handler();\r\n }\r\n this.finishedHandlers = [];\r\n\r\n // Notify the parent that our own pending operation has completed.\r\n if (this.parentProvider) {\r\n this.parentProvider.completeAsyncOperation(this.operationKey);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds a new operation identified by the promise. When the promise\r\n * either resolves or fails the operation is considered completed.\r\n *\r\n * @param operation The promise that represents the operation.\r\n */\r\n public addOperation(operation: Promise): void {\r\n const operationKey = newGuid();\r\n\r\n this.startAsyncOperation(operationKey);\r\n\r\n operation.then(() => this.completeAsyncOperation(operationKey))\r\n .catch(() => this.completeAsyncOperation(operationKey));\r\n }\r\n\r\n /**\r\n * Notes that an asynchronous operation has started on a child component.\r\n *\r\n * @param key The key that identifies the operation.\r\n */\r\n public startAsyncOperation(key: Guid): void {\r\n this.pendingOperations.push(key);\r\n\r\n // If this is the first operation we started, notify the parent provider.\r\n if (this.pendingOperations.length === 1 && this.parentProvider) {\r\n this.parentProvider.startAsyncOperation(this.operationKey);\r\n }\r\n }\r\n\r\n /**\r\n * Notes that an asynchrounous operation has completed on a child component.\r\n *\r\n * @param key The key that was previously passed to startAsyncOperation.\r\n */\r\n public completeAsyncOperation(key: Guid): void {\r\n const index = this.pendingOperations.indexOf(key);\r\n\r\n if (index !== -1) {\r\n this.pendingOperations.splice(index, 1);\r\n }\r\n\r\n // If this was the last operation then send notifications.\r\n if (this.pendingOperations.length === 0) {\r\n this.allOperationsComplete();\r\n }\r\n }\r\n\r\n /**\r\n * Checks if this provider has any asynchronous operations that are still\r\n * pending completion.\r\n *\r\n * @returns true if there are pending operations; otherwise false.\r\n */\r\n public hasPendingOperations(): boolean {\r\n return this.pendingOperations.length > 0;\r\n }\r\n\r\n /**\r\n * Adds a new handler that is called when all pending operations have been\r\n * completed. This is a fire-once, meaning the callback will only be called\r\n * when the current pending operations have completed. If new operations\r\n * begin after the callback is executed it will not be called again unless\r\n * it is added with this method again.\r\n *\r\n * @param callback The function to call when all pending operations have completed.\r\n */\r\n public addFinishedHandler(callback: () => void): void {\r\n this.finishedHandlers.push(callback);\r\n }\r\n}\r\n\r\n/**\r\n * Provides a new suspense provider to any child components.\r\n *\r\n * @param provider The provider to make available to child components.\r\n */\r\nexport function provideSuspense(provider: ISuspenseProvider): void {\r\n provide(suspenseSymbol, provider);\r\n}\r\n\r\n/**\r\n * Uses the current suspense provider that was defined by any parent component.\r\n *\r\n * @returns The suspense provider if one was defined; otherwise undefined.\r\n */\r\nexport function useSuspense(): ISuspenseProvider | undefined {\r\n return inject(suspenseSymbol);\r\n}\r\n\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport { AsyncComponentLoader, Component, ComponentPublicInstance, defineAsyncComponent as vueDefineAsyncComponent, ExtractPropTypes, PropType, reactive, ref, Ref, watch, WatchOptions } from \"vue\";\r\nimport { deepEqual } from \"./util\";\r\nimport { useSuspense } from \"./suspense\";\r\nimport { newGuid } from \"./guid\";\r\nimport { ControlLazyMode } from \"@Obsidian/Enums/Controls/controlLazyMode\";\r\nimport { PickerDisplayStyle } from \"@Obsidian/Enums/Controls/pickerDisplayStyle\";\r\nimport { ExtendedRef, ExtendedRefContext } from \"@Obsidian/Types/Utility/component\";\r\nimport type { RulesPropType, ValidationRule } from \"@Obsidian/Types/validationRules\";\r\n\r\ntype Prop = { [key: string]: unknown };\r\ntype PropKey = Extract;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype EmitFn = E extends Array ? (event: EE, ...args: any[]) => void : (event: E, ...args: any[]) => void;\r\n\r\n/**\r\n * Utility function for when you are using a component that takes a v-model\r\n * and uses that model as a v-model in that component's template. It creates\r\n * a new ref that keeps itself up-to-date with the given model and fires an\r\n * 'update:MODELNAME' event when it gets changed.\r\n *\r\n * Ensure the related `props` and `emits` are specified to ensure there are\r\n * no type issues.\r\n */\r\nexport function useVModelPassthrough, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn, options?: WatchOptions): Ref {\r\n const internalValue = ref(props[modelName]) as Ref;\r\n\r\n watch(() => props[modelName], val => updateRefValue(internalValue, val), options);\r\n watch(internalValue, val => emit(`update:${modelName}`, val), options);\r\n\r\n return internalValue;\r\n}\r\n\r\n/**\r\n * Utility function for when you are using a component that takes a v-model\r\n * and uses that model as a v-model in that component's template. It creates\r\n * a new ref that keeps itself up-to-date with the given model and fires an\r\n * 'update:MODELNAME' event when it gets changed. It also gives a means of watching\r\n * the model prop for any changes (verifies that the prop change is different than\r\n * the current value first)\r\n *\r\n * Ensure the related `props` and `emits` are specified to ensure there are\r\n * no type issues.\r\n */\r\nexport function useVModelPassthroughWithPropUpdateCheck, E extends `update:${K}`>(props: T, modelName: K, emit: EmitFn, options?: WatchOptions): [Ref, (fn: () => unknown) => void] {\r\n const internalValue = ref(props[modelName]) as Ref;\r\n const listeners: (() => void)[] = [];\r\n\r\n watch(() => props[modelName], val => {\r\n if (updateRefValue(internalValue, val)) {\r\n onPropUpdate();\r\n }\r\n }, options);\r\n watch(internalValue, val => emit(`update:${modelName}`, val), options);\r\n\r\n function onPropUpdate(): void {\r\n listeners.forEach(fn => fn());\r\n }\r\n\r\n function addPropUpdateListener(fn: () => unknown): void {\r\n listeners.push(fn);\r\n }\r\n\r\n return [internalValue, addPropUpdateListener];\r\n}\r\n\r\n/**\r\n * Updates the Ref value, but only if the new value is actually different than\r\n * the current value. A deep comparison is performed.\r\n *\r\n * @param target The target Ref object to be updated.\r\n * @param value The new value to be assigned to the target.\r\n *\r\n * @returns True if the target was updated, otherwise false.\r\n */\r\nexport function updateRefValue(target: Ref, value: TV): boolean {\r\n if (deepEqual(target.value, value, true)) {\r\n return false;\r\n }\r\n\r\n target.value = value;\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Defines a component that will be loaded asynchronously. This contains logic\r\n * to properly work with the RockSuspense control.\r\n *\r\n * @param source The function to call to load the component.\r\n *\r\n * @returns The component that was loaded.\r\n */\r\nexport function defineAsyncComponent(source: AsyncComponentLoader): T {\r\n return vueDefineAsyncComponent(async () => {\r\n const suspense = useSuspense();\r\n const operationKey = newGuid();\r\n\r\n suspense?.startAsyncOperation(operationKey);\r\n const component = await source();\r\n suspense?.completeAsyncOperation(operationKey);\r\n\r\n return component;\r\n });\r\n}\r\n\r\n// #region Standard Form Field\r\n\r\ntype StandardRockFormFieldProps = {\r\n label: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n help: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n rules: RulesPropType,\r\n\r\n formGroupClasses: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n validationTitle: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n isRequiredIndicatorHidden: {\r\n type: PropType,\r\n default: false\r\n }\r\n};\r\n\r\n/** The standard component props that should be included when using RockFormField. */\r\nexport const standardRockFormFieldProps: StandardRockFormFieldProps = {\r\n label: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n help: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n rules: {\r\n type: [Array, Object, String] as PropType,\r\n default: \"\"\r\n },\r\n\r\n formGroupClasses: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n validationTitle: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n isRequiredIndicatorHidden: {\r\n type: Boolean as PropType,\r\n default: false\r\n }\r\n};\r\n\r\n/**\r\n * Copies the known properties for the standard rock form field props from\r\n * the source object to the destination object.\r\n *\r\n * @param source The source object to copy the values from.\r\n * @param destination The destination object to copy the values to.\r\n */\r\nfunction copyStandardRockFormFieldProps(source: ExtractPropTypes, destination: ExtractPropTypes): void {\r\n destination.formGroupClasses = source.formGroupClasses;\r\n destination.help = source.help;\r\n destination.label = source.label;\r\n destination.rules = source.rules;\r\n destination.validationTitle = source.validationTitle;\r\n}\r\n\r\n/**\r\n * Configures the basic properties that should be passed to the RockFormField\r\n * component. The value returned by this function should be used with v-bind on\r\n * the RockFormField in order to pass all the defined prop values to it.\r\n *\r\n * @param props The props of the component that will be using the RockFormField.\r\n *\r\n * @returns An object of prop values that can be used with v-bind.\r\n */\r\nexport function useStandardRockFormFieldProps(props: ExtractPropTypes): ExtractPropTypes {\r\n const propValues = reactive>({\r\n label: props.label,\r\n help: props.help,\r\n rules: props.rules,\r\n formGroupClasses: props.formGroupClasses,\r\n validationTitle: props.validationTitle,\r\n isRequiredIndicatorHidden: props.isRequiredIndicatorHidden\r\n });\r\n\r\n watch([() => props.formGroupClasses, () => props.help, () => props.label, () => props.rules, () => props.validationTitle], () => {\r\n copyStandardRockFormFieldProps(props, propValues);\r\n });\r\n\r\n return propValues;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Standard Async Pickers\r\n\r\ntype StandardAsyncPickerProps = StandardRockFormFieldProps & {\r\n /** Enhance the picker for dealing with long lists by providing a search mechanism. */\r\n enhanceForLongLists: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** The method the picker should use to load data. */\r\n lazyMode: {\r\n type: PropType,\r\n default: \"onDemand\"\r\n },\r\n\r\n /** True if the picker should allow multiple items to be selected. */\r\n multiple: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** True if the picker should allow empty selections. */\r\n showBlankItem: {\r\n type: PropType,\r\n default: false\r\n },\r\n\r\n /** The optional value to show when `showBlankItem` is `true`. */\r\n blankValue: {\r\n type: PropType,\r\n default: \"\"\r\n },\r\n\r\n /** The visual style to use when displaying the picker. */\r\n displayStyle: {\r\n type: PropType,\r\n default: \"auto\"\r\n },\r\n\r\n /** The number of columns to use when displaying the items in a list. */\r\n columnCount: {\r\n type: PropType,\r\n default: 0\r\n }\r\n};\r\n\r\n/** The standard component props that should be included when using BaseAsyncPicker. */\r\nexport const standardAsyncPickerProps: StandardAsyncPickerProps = {\r\n ...standardRockFormFieldProps,\r\n\r\n enhanceForLongLists: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n lazyMode: {\r\n type: String as PropType,\r\n default: ControlLazyMode.OnDemand\r\n },\r\n\r\n multiple: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n showBlankItem: {\r\n type: Boolean as PropType,\r\n default: false\r\n },\r\n\r\n blankValue: {\r\n type: String as PropType,\r\n default: \"\"\r\n },\r\n\r\n displayStyle: {\r\n type: String as PropType,\r\n default: PickerDisplayStyle.Auto\r\n },\r\n\r\n columnCount: {\r\n type: Number as PropType,\r\n default: 0\r\n }\r\n};\r\n\r\n/**\r\n * Copies the known properties for the standard async picker props from\r\n * the source object to the destination object.\r\n *\r\n * @param source The source object to copy the values from.\r\n * @param destination The destination object to copy the values to.\r\n */\r\nfunction copyStandardAsyncPickerProps(source: ExtractPropTypes, destination: ExtractPropTypes): void {\r\n copyStandardRockFormFieldProps(source, destination);\r\n\r\n destination.enhanceForLongLists = source.enhanceForLongLists;\r\n destination.lazyMode = source.lazyMode;\r\n destination.multiple = source.multiple;\r\n destination.showBlankItem = source.showBlankItem;\r\n destination.blankValue = source.blankValue;\r\n destination.displayStyle = source.displayStyle;\r\n destination.columnCount = source.columnCount;\r\n}\r\n\r\n/**\r\n * Configures the basic properties that should be passed to the BaseAsyncPicker\r\n * component. The value returned by this function should be used with v-bind on\r\n * the BaseAsyncPicker in order to pass all the defined prop values to it.\r\n *\r\n * @param props The props of the component that will be using the BaseAsyncPicker.\r\n *\r\n * @returns An object of prop values that can be used with v-bind.\r\n */\r\nexport function useStandardAsyncPickerProps(props: ExtractPropTypes): ExtractPropTypes {\r\n const standardFieldProps = useStandardRockFormFieldProps(props);\r\n\r\n const propValues = reactive>({\r\n ...standardFieldProps,\r\n enhanceForLongLists: props.enhanceForLongLists,\r\n lazyMode: props.lazyMode,\r\n multiple: props.multiple,\r\n showBlankItem: props.showBlankItem,\r\n blankValue: props.blankValue,\r\n displayStyle: props.displayStyle,\r\n columnCount: props.columnCount\r\n });\r\n\r\n // Watch for changes in any of the standard props. Use deep for this so we\r\n // don't need to know which prop keys it actually contains.\r\n watch(() => standardFieldProps, () => {\r\n copyStandardRockFormFieldProps(props, propValues);\r\n }, {\r\n deep: true\r\n });\r\n\r\n // Watch for changes in our known list of props that might change.\r\n watch([() => props.enhanceForLongLists, () => props.lazyMode, () => props.multiple, () => props.showBlankItem, () => props.displayStyle, () => props.columnCount], () => {\r\n copyStandardAsyncPickerProps(props, propValues);\r\n });\r\n\r\n return propValues;\r\n}\r\n\r\n// #endregion\r\n\r\n// #region Extended References\r\n\r\n/**\r\n * Creates a Ref that contains extended data to better identify this ref\r\n * when you have multiple refs to work with.\r\n *\r\n * @param value The initial value of the Ref.\r\n * @param extendedData The additional context data to put on the Ref.\r\n *\r\n * @returns An ExtendedRef object that can be used like a regular Ref object.\r\n */\r\nexport function extendedRef(value: T, context: ExtendedRefContext): ExtendedRef {\r\n const refValue = ref(value) as ExtendedRef;\r\n\r\n refValue.context = context;\r\n\r\n return refValue;\r\n}\r\n\r\n/**\r\n * Creates an extended Ref with the specified property name in the context.\r\n *\r\n * @param value The initial value of the Ref.\r\n * @param propertyName The property name to use for the context.\r\n *\r\n * @returns An ExtendedRef object that can be used like a regular Ref object.\r\n */\r\nexport function propertyRef(value: T, propertyName: string): ExtendedRef {\r\n return extendedRef(value, {\r\n propertyName\r\n });\r\n}\r\n\r\n// #endregion Extended Refs\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\n// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat\r\n// Number.toLocaleString takes the same options as Intl.NumberFormat\r\n// Most of the options probably won't get used, so just add the ones you need to use to this when needed\r\ntype NumberFormatOptions = {\r\n useGrouping?: boolean // MDN gives other possible values, but TS is complaining that it should only be boolean\r\n};\r\n\r\n/**\r\n * Get a formatted string.\r\n * Ex: 10001.2 => 10,001.2\r\n * @param num\r\n */\r\nexport function asFormattedString(num: number | null, digits?: number, options: NumberFormatOptions = {}): string {\r\n if (num === null) {\r\n return \"\";\r\n }\r\n\r\n return num.toLocaleString(\r\n \"en-US\",\r\n {\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits ?? 9,\r\n ...options\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * Get a number value from a formatted string. If the number cannot be parsed, then zero is returned by default.\r\n * Ex: $1,000.20 => 1000.2\r\n * @param str\r\n */\r\nexport function toNumber(str?: string | number | null): number {\r\n return toNumberOrNull(str) || 0;\r\n}\r\n\r\n/**\r\n * Get a number value from a formatted string. If the number cannot be parsed, then null is returned by default.\r\n * Ex: $1,000.20 => 1000.2\r\n * @param str\r\n */\r\nexport function toNumberOrNull(str?: string | number | null): number | null {\r\n if (str === null || str === undefined || str === \"\") {\r\n return null;\r\n }\r\n\r\n if (typeof str === \"number\") {\r\n return str;\r\n }\r\n\r\n const replaced = str.replace(/[$,]/g, \"\");\r\n const num = Number(replaced);\r\n\r\n return !isNaN(num) ? num : null;\r\n}\r\n\r\n/**\r\n * Get a currency value from a string or number. If the number cannot be parsed, then null is returned by default.\r\n * Ex: 1000.20 => $1,000.20\r\n * @param value The value to be converted to a currency.\r\n */\r\nexport function toCurrencyOrNull(value?: string | number | null): string | null {\r\n if (typeof value === \"string\") {\r\n value = toNumberOrNull(value);\r\n }\r\n\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n return \"$\" + asFormattedString(value, 2);\r\n}\r\n\r\n/**\r\n * Adds an ordinal suffix.\r\n * Ex: 1 => 1st\r\n * @param num\r\n */\r\nexport function toOrdinalSuffix(num?: number | null): string {\r\n if (!num) {\r\n return \"\";\r\n }\r\n\r\n const j = num % 10;\r\n const k = num % 100;\r\n\r\n if (j == 1 && k != 11) {\r\n return num + \"st\";\r\n }\r\n if (j == 2 && k != 12) {\r\n return num + \"nd\";\r\n }\r\n if (j == 3 && k != 13) {\r\n return num + \"rd\";\r\n }\r\n return num + \"th\";\r\n}\r\n\r\n/**\r\n * Convert a number to an ordinal.\r\n * Ex: 1 => first\r\n * @param num\r\n */\r\nexport function toOrdinal(num?: number | null): string {\r\n if (!num) {\r\n return \"\";\r\n }\r\n\r\n switch (num) {\r\n case 1: return \"first\";\r\n case 2: return \"second\";\r\n case 3: return \"third\";\r\n case 4: return \"fourth\";\r\n case 5: return \"fifth\";\r\n case 6: return \"sixth\";\r\n case 7: return \"seventh\";\r\n case 8: return \"eighth\";\r\n case 9: return \"ninth\";\r\n case 10: return \"tenth\";\r\n default: return toOrdinalSuffix(num);\r\n }\r\n}\r\n\r\n/**\r\n * Convert a number to a word.\r\n * Ex: 1 => one\r\n * @param num\r\n */\r\nexport function toWord(num?: number | null): string {\r\n if (num === null || num === undefined) {\r\n return \"\";\r\n }\r\n\r\n switch (num) {\r\n case 1: return \"one\";\r\n case 2: return \"two\";\r\n case 3: return \"three\";\r\n case 4: return \"four\";\r\n case 5: return \"five\";\r\n case 6: return \"six\";\r\n case 7: return \"seven\";\r\n case 8: return \"eight\";\r\n case 9: return \"nine\";\r\n case 10: return \"ten\";\r\n default: return `${num}`;\r\n }\r\n}\r\n\r\nexport function zeroPad(num: number, length: number): string {\r\n let str = num.toString();\r\n\r\n while (str.length < length) {\r\n str = \"0\" + str;\r\n }\r\n\r\n return str;\r\n}\r\n\r\nexport function toDecimalPlaces(num: number, decimalPlaces: number): number {\r\n decimalPlaces = Math.floor(decimalPlaces); // ensure it's an integer\r\n\r\n return Math.round(num * 10 ** decimalPlaces) / 10 ** decimalPlaces;\r\n}\r\n\r\nexport default {\r\n toOrdinal,\r\n toOrdinalSuffix,\r\n toNumberOrNull,\r\n asFormattedString\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { toNumberOrNull, zeroPad } from \"./numberUtils\";\r\nconst dateKeyLength = \"YYYYMMDD\".length;\r\nconst dateKeyNoYearLength = \"MMDD\".length;\r\n\r\n/**\r\n * Gets the year value from the date key.\r\n * Ex: 20210228 => 2021\r\n * @param dateKey\r\n */\r\nexport function getYear(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey || dateKey.length !== dateKeyLength) {\r\n return defaultValue;\r\n }\r\n\r\n const asString = dateKey.substring(0, 4);\r\n const year = toNumberOrNull(asString) || defaultValue;\r\n return year;\r\n}\r\n\r\n/**\r\n * Gets the month value from the date key.\r\n * Ex: 20210228 => 2\r\n * @param dateKey\r\n */\r\nexport function getMonth(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey) {\r\n return defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyLength) {\r\n const asString = dateKey.substring(4, 6);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyNoYearLength) {\r\n const asString = dateKey.substring(0, 2);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Gets the day value from the date key.\r\n * Ex: 20210228 => 28\r\n * @param dateKey\r\n */\r\nexport function getDay(dateKey: string | null): number {\r\n const defaultValue = 0;\r\n\r\n if (!dateKey) {\r\n return defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyLength) {\r\n const asString = dateKey.substring(6, 8);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n if (dateKey.length === dateKeyNoYearLength) {\r\n const asString = dateKey.substring(2, 4);\r\n return toNumberOrNull(asString) || defaultValue;\r\n }\r\n\r\n return defaultValue;\r\n}\r\n\r\n/**\r\n * Gets the datekey constructed from the parts.\r\n * Ex: (2021, 2, 28) => '20210228'\r\n * @param year\r\n * @param month\r\n * @param day\r\n */\r\nexport function toDateKey(year: number | null, month: number | null, day: number | null): string {\r\n if (!year || year > 9999 || year < 0) {\r\n year = 0;\r\n }\r\n\r\n if (!month || month > 12 || month < 0) {\r\n month = 0;\r\n }\r\n\r\n if (!day || day > 31 || day < 0) {\r\n day = 0;\r\n }\r\n\r\n const yearStr = zeroPad(year, 4);\r\n const monthStr = zeroPad(month, 2);\r\n const dayStr = zeroPad(day, 2);\r\n\r\n return `${yearStr}${monthStr}${dayStr}`;\r\n}\r\n\r\n/**\r\n * Gets the datekey constructed from the parts.\r\n * Ex: (2, 28) => '0228'\r\n * @param month\r\n * @param day\r\n */\r\nexport function toNoYearDateKey(month: number | null, day: number | null): string {\r\n if (!month || month > 12 || month < 0) {\r\n month = 0;\r\n }\r\n\r\n if (!day || day > 31 || day < 0) {\r\n day = 0;\r\n }\r\n\r\n const monthStr = zeroPad(month, 2);\r\n const dayStr = zeroPad(day, 2);\r\n\r\n return `${monthStr}${dayStr}`;\r\n}\r\n\r\nexport default {\r\n getYear,\r\n getMonth,\r\n getDay,\r\n toDateKey,\r\n toNoYearDateKey\r\n};\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { PersonBag } from \"@Obsidian/ViewModels/Entities/personBag\";\r\nimport { IEntity } from \"@Obsidian/ViewModels/entity\";\r\n\r\nexport type PageConfig = {\r\n executionStartTime: number;\r\n pageId: number;\r\n pageGuid: Guid;\r\n pageParameters: Record;\r\n currentPerson: PersonBag | null;\r\n contextEntities: Record;\r\n loginUrlWithReturnUrl: string;\r\n};\r\n\r\nexport function smoothScrollToTop(): void {\r\n window.scrollTo({ top: 0, behavior: \"smooth\" });\r\n}\r\n\r\nexport default {\r\n smoothScrollToTop\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\r\ndeclare const Obsidian: any;\r\n\r\n\r\n/*\r\n * Code to handle working with modals.\r\n */\r\nlet currentModalCount = 0;\r\n\r\n/**\r\n * Track a modal being opened or closed. This is used to adjust the page in response\r\n * to any modals being visible.\r\n *\r\n * @param state true if the modal is now open, false if it is now closed.\r\n */\r\nexport function trackModalState(state: boolean): void {\r\n const body = document.body;\r\n const cssClasses = [\"modal-open\"];\r\n\r\n if (state) {\r\n currentModalCount++;\r\n }\r\n else {\r\n currentModalCount = currentModalCount > 0 ? currentModalCount - 1 : 0;\r\n }\r\n\r\n if (currentModalCount > 0) {\r\n for (const cssClass of cssClasses) {\r\n body.classList.add(cssClass);\r\n }\r\n }\r\n else {\r\n for (const cssClass of cssClasses) {\r\n body.classList.remove(cssClass);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Loads a JavaScript file asynchronously into the document and returns a\r\n * Promise that can be used to determine when the script has loaded. The\r\n * promise will return true if the script loaded successfully or false if it\r\n * failed to load.\r\n *\r\n * The function passed in isScriptLoaded will be called before the script is\r\n * inserted into the DOM as well as after to make sure it actually loaded.\r\n *\r\n * @param source The source URL of the script to be loaded.\r\n * @param isScriptLoaded An optional function to call to determine if the script is loaded.\r\n * @param attributes An optional set of attributes to apply to the script tag.\r\n * @param fingerprint If set to false, then a fingerprint will not be added to the source URL. Default is true.\r\n *\r\n * @returns A Promise that indicates if the script was loaded or not.\r\n */\r\nexport async function loadJavaScriptAsync(source: string, isScriptLoaded?: () => boolean, attributes?: Record, fingerprint?: boolean): Promise {\r\n let src = source;\r\n\r\n // Add the cache busting fingerprint if we have one.\r\n if (fingerprint !== false && Obsidian.options.fingerprint) {\r\n if (src.indexOf(\"?\") === -1) {\r\n src += `?${Obsidian.options.fingerprint}`;\r\n }\r\n else {\r\n src += `&${Obsidian.options.fingerprint}`;\r\n }\r\n }\r\n\r\n // Check if the script is already loaded. First see if we have a custom\r\n // function that will do the check. Otherwise fall back to looking for any\r\n // script tags that have the same source.\r\n if (isScriptLoaded) {\r\n if (isScriptLoaded()) {\r\n return true;\r\n }\r\n }\r\n\r\n // Make sure the script wasn't already added in some other way.\r\n const scripts = Array.from(document.getElementsByTagName(\"script\"));\r\n const thisScript = scripts.filter(s => s.src === src);\r\n\r\n if (thisScript.length > 0) {\r\n const promise = scriptLoadedPromise(thisScript[0]);\r\n return promise;\r\n }\r\n\r\n // Build the script tag that will be dynamically loaded.\r\n const script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = src;\r\n if (attributes) {\r\n for (const key in attributes) {\r\n script.setAttribute(key, attributes[key]);\r\n }\r\n }\r\n\r\n // Load the script.\r\n const promise = scriptLoadedPromise(script);\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n\r\n return promise;\r\n\r\n async function scriptLoadedPromise(scriptElement: HTMLScriptElement): Promise {\r\n try {\r\n await new Promise((resolve, reject) => {\r\n scriptElement.addEventListener(\"load\", () => resolve());\r\n scriptElement.addEventListener(\"error\", () => {\r\n reject();\r\n });\r\n });\r\n\r\n // If we have a custom function, call it to see if the script loaded correctly.\r\n if (isScriptLoaded) {\r\n return isScriptLoaded();\r\n }\r\n\r\n return true;\r\n }\r\n catch {\r\n return false;\r\n }\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { trackModalState } from \"./page\";\r\n\r\ntype DialogOptions = {\r\n message: string;\r\n buttons: ButtonOptions[];\r\n container?: string | Element;\r\n};\r\n\r\ntype ButtonOptions = {\r\n key: string;\r\n label: string;\r\n className: string;\r\n};\r\n\r\n/**\r\n * Creates a dialog to display a message.\r\n * \r\n * @param body The body content to put in the dialog.\r\n * @param footer The footer content to put in the dialog.\r\n *\r\n * @returns An element that should be added to the body.\r\n */\r\nfunction createDialog(body: HTMLElement | HTMLElement[], footer: HTMLElement | HTMLElement[] | undefined): HTMLElement {\r\n // Create the scrollable container that will act as a backdrop for the dialog.\r\n const scrollable = document.createElement(\"div\");\r\n scrollable.classList.add(\"modal-scrollable\");\r\n scrollable.style.zIndex = \"1060\";\r\n\r\n // Create the modal that will act as a container for the outer content.\r\n const modal = document.createElement(\"div\");\r\n scrollable.appendChild(modal);\r\n modal.classList.add(\"modal\", \"fade\");\r\n modal.tabIndex = -1;\r\n modal.setAttribute(\"role\", \"dialog\");\r\n modal.setAttribute(\"aria-hidden\", \"false\");\r\n modal.style.display = \"block\";\r\n\r\n // Create the inner dialog of the modal.\r\n const modalDialog = document.createElement(\"div\");\r\n modal.appendChild(modalDialog);\r\n modalDialog.classList.add(\"modal-dialog\");\r\n\r\n // Create the container for the inner content.\r\n const modalContent = document.createElement(\"div\");\r\n modalDialog.appendChild(modalContent);\r\n modalContent.classList.add(\"modal-content\");\r\n\r\n // Create the container for the body content.\r\n const modalBody = document.createElement(\"div\");\r\n modalContent.appendChild(modalBody);\r\n modalBody.classList.add(\"modal-body\");\r\n\r\n // Add all the body elements to the body.\r\n if (Array.isArray(body)) {\r\n for (const el of body) {\r\n modalBody.appendChild(el);\r\n }\r\n }\r\n else {\r\n modalBody.appendChild(body);\r\n }\r\n\r\n // If we have any footer content then create a footer.\r\n if (footer && (!Array.isArray(footer) || footer.length > 0)) {\r\n const modalFooter = document.createElement(\"div\");\r\n modalContent.appendChild(modalFooter);\r\n modalFooter.classList.add(\"modal-footer\");\r\n\r\n // Add all the footer elements to the footer.\r\n if (Array.isArray(footer)) {\r\n for (const el of footer) {\r\n modalFooter.appendChild(el);\r\n }\r\n }\r\n else {\r\n modalFooter.appendChild(footer);\r\n }\r\n }\r\n\r\n // Add a click handler to the background so the user gets feedback\r\n // that they can't just click away from the dialog.\r\n scrollable.addEventListener(\"click\", () => {\r\n modal.classList.remove(\"animated\", \"shake\");\r\n setTimeout(() => {\r\n modal.classList.add(\"animated\", \"shake\");\r\n }, 0);\r\n });\r\n\r\n return scrollable;\r\n}\r\n\r\n/**\r\n * Construct a standard close button to be placed in the dialog.\r\n *\r\n * @returns A button element.\r\n */\r\nfunction createCloseButton(): HTMLButtonElement {\r\n const closeButton = document.createElement(\"button\");\r\n closeButton.classList.add(\"close\");\r\n closeButton.type = \"button\";\r\n closeButton.style.marginTop = \"-10px\";\r\n closeButton.innerHTML = \"×\";\r\n\r\n return closeButton;\r\n}\r\n\r\n/**\r\n * Creates a standard backdrop element to be placed in the window.\r\n *\r\n * @returns An element to show that the background is not active.\r\n */\r\nfunction createBackdrop(): HTMLElement {\r\n const backdrop = document.createElement(\"div\");\r\n backdrop.classList.add(\"modal-backdrop\");\r\n backdrop.style.zIndex = \"1050\";\r\n\r\n return backdrop;\r\n}\r\n\r\n/**\r\n * Shows a dialog modal. This is meant to look and behave like the standard\r\n * Rock.dialog.* functions, but this handles fullscreen mode whereas the old\r\n * methods do not.\r\n * \r\n * @param options The options that describe the dialog to be shown.\r\n *\r\n * @returns The key of the button that was clicked, or \"cancel\" if the cancel button was clicked.\r\n */\r\nfunction showDialog(options: DialogOptions): Promise {\r\n return new Promise(resolve => {\r\n let timer: NodeJS.Timeout | null = null;\r\n const container = document.fullscreenElement || document.body;\r\n const body = document.createElement(\"div\");\r\n body.innerText = options.message;\r\n\r\n const buttons: HTMLElement[] = [];\r\n\r\n /**\r\n * Internal function to handle clearing the dialog and resolving the\r\n * promise.\r\n * \r\n * @param result The result to return in the promise.\r\n */\r\n function clearDialog(result: string): void {\r\n // This acts as a way to ensure only a single clear request happens.\r\n if (timer !== null) {\r\n return;\r\n }\r\n\r\n // The timout is used as a fallback in case we don't get the\r\n // transition end event.\r\n timer = setTimeout(() => {\r\n backdrop.remove();\r\n dialog.remove();\r\n trackModalState(false);\r\n\r\n resolve(result);\r\n }, 1000);\r\n\r\n modal.addEventListener(\"transitionend\", () => {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n\r\n backdrop.remove();\r\n dialog.remove();\r\n trackModalState(false);\r\n\r\n resolve(result);\r\n });\r\n\r\n modal.classList.remove(\"in\");\r\n backdrop.classList.remove(\"in\");\r\n }\r\n\r\n // Add in all the buttons specified.\r\n for (const button of options.buttons) {\r\n const btn = document.createElement(\"button\");\r\n btn.classList.value = button.className;\r\n btn.type = \"button\";\r\n btn.innerText = button.label;\r\n btn.addEventListener(\"click\", () => {\r\n clearDialog(button.key);\r\n });\r\n buttons.push(btn);\r\n }\r\n\r\n // Construct the close (cancel) button.\r\n const closeButton = createCloseButton();\r\n closeButton.addEventListener(\"click\", () => {\r\n clearDialog(\"cancel\");\r\n });\r\n\r\n const dialog = createDialog([closeButton, body], buttons);\r\n const backdrop = createBackdrop();\r\n\r\n const modal = dialog.querySelector(\".modal\") as HTMLElement;\r\n\r\n // Do final adjustments to the elements and add to the body.\r\n trackModalState(true);\r\n container.appendChild(dialog);\r\n container.appendChild(backdrop);\r\n modal.style.marginTop = `-${modal.offsetHeight / 2.0}px`;\r\n\r\n // Show the backdrop and the modal.\r\n backdrop.classList.add(\"in\");\r\n modal.classList.add(\"in\");\r\n });\r\n}\r\n\r\n/**\r\n * Shows an alert message that requires the user to acknowledge.\r\n * \r\n * @param message The message text to be displayed.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed.\r\n */\r\nexport async function alert(message: string): Promise {\r\n await showDialog({\r\n message,\r\n buttons: [\r\n {\r\n key: \"ok\",\r\n label: \"OK\",\r\n className: \"btn btn-primary\"\r\n }\r\n ]\r\n });\r\n}\r\n\r\n/**\r\n * Shows a confirmation dialog that consists of OK and Cancel buttons. The\r\n * user will be required to click one of these two buttons.\r\n * \r\n * @param message The message to be displayed inside the dialog.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed. The\r\n * value will be true if the OK button was clicked or false otherwise.\r\n */\r\nexport async function confirm(message: string): Promise {\r\n const result = await showDialog({\r\n message,\r\n buttons: [\r\n {\r\n key: \"ok\",\r\n label: \"OK\",\r\n className: \"btn btn-primary\"\r\n },\r\n {\r\n key: \"cancel\",\r\n label: \"Cancel\",\r\n className: \"btn btn-default\"\r\n }\r\n ]\r\n });\r\n\r\n return result === \"ok\";\r\n}\r\n\r\n/**\r\n * Shows a delete confirmation dialog that consists of OK and Cancel buttons.\r\n * The user will be required to click one of these two buttons. The message\r\n * is standardized.\r\n *\r\n * @param nameText The name of type that will be deleted.\r\n *\r\n * @returns A promise that indicates when the dialog has been dismissed. The\r\n * value will be true if the OK button was clicked or false otherwise.\r\n */\r\nexport function confirmDelete(typeName: string, additionalMessage?: string): Promise {\r\n let message = `Are you sure you want to delete this ${typeName}?`;\r\n\r\n if (additionalMessage) {\r\n message += ` ${additionalMessage}`;\r\n }\r\n\r\n return confirm(message);\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Is the value a valid email address?\r\n * @param val\r\n */\r\nexport function isEmail(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n const re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(val.toLowerCase());\r\n }\r\n\r\n return false;\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { isValidGuid, normalize } from \"./guid\";\r\nimport { IFieldType } from \"@Obsidian/Types/fieldType\";\r\n\r\nconst fieldTypeTable: Record = {};\r\n\r\n/**\r\n * Register a new field type in the system. This must be called for all field\r\n * types a plugin registers.\r\n * \r\n * @param fieldTypeGuid The unique identifier of the field type.\r\n * @param fieldType The class instance that will handle the field type.\r\n */\r\nexport function registerFieldType(fieldTypeGuid: Guid, fieldType: IFieldType): void {\r\n const normalizedGuid = normalize(fieldTypeGuid);\r\n\r\n if (!isValidGuid(fieldTypeGuid) || normalizedGuid === null) {\r\n throw \"Invalid guid specified when registering field type.\";\r\n }\r\n\r\n if (fieldTypeTable[normalizedGuid] !== undefined) {\r\n throw \"Invalid attempt to replace existing field type.\";\r\n }\r\n\r\n fieldTypeTable[normalizedGuid] = fieldType;\r\n}\r\n\r\n/**\r\n * Get the field type handler for a given unique identifier.\r\n *\r\n * @param fieldTypeGuid The unique identifier of the field type.\r\n * \r\n * @returns The field type instance or null if not found.\r\n */\r\nexport function getFieldType(fieldTypeGuid: Guid): IFieldType | null {\r\n const normalizedGuid = normalize(fieldTypeGuid);\r\n\r\n if (normalizedGuid !== null) {\r\n const field = fieldTypeTable[normalizedGuid];\r\n\r\n if (field) {\r\n return field;\r\n }\r\n }\r\n\r\n console.warn(`Field type \"${fieldTypeGuid}\" was not found`);\r\n return null;\r\n}\r\n\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { inject, provide } from \"vue\";\r\n\r\n/** The unique symbol used when injecting the form state. */\r\nconst formStateSymbol = Symbol();\r\n\r\n/**\r\n * Holds the state of a single form on the page along with any callback methods\r\n * that can be used to interact with the form.\r\n */\r\nexport type FormState = {\r\n /** The number of submissions the form has had. */\r\n submitCount: number;\r\n\r\n /** Sets the current error for the given field name. A blank error means no error. */\r\n setError: (id: string, name: string, error: string) => void;\r\n};\r\n\r\n/**\r\n * Contains the internal form error passed between RockForm and RockValidation.\r\n *\r\n * This is an internal type and subject to change at any time.\r\n */\r\nexport type FormError = {\r\n /** The name of the field. */\r\n name: string;\r\n\r\n /** The current error text. */\r\n text: string;\r\n};\r\n\r\n/**\r\n * Provides the form state for any child components that need access to it.\r\n * \r\n * @param state The state that will be provided to child components.\r\n */\r\nexport function provideFormState(state: FormState): void {\r\n provide(formStateSymbol, state);\r\n}\r\n\r\n/**\r\n * Makes use of the FormState that was previously provided by a parent component.\r\n *\r\n * @returns The form state or undefined if it was not available.\r\n */\r\nexport function useFormState(): FormState | undefined {\r\n return inject(formStateSymbol, undefined);\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n// Define the browser-specific versions of these functions that older browsers\r\n// implemented before using the standard API.\r\ndeclare global {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface Document {\r\n mozCancelFullScreen?: () => Promise;\r\n webkitExitFullscreen?: () => Promise;\r\n mozFullScreenElement?: Element;\r\n webkitFullscreenElement?: Element;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n interface HTMLElement {\r\n mozRequestFullscreen?: () => Promise;\r\n webkitRequestFullscreen?: () => Promise;\r\n }\r\n}\r\n\r\n/**\r\n * Request that the window enter true fullscreen mode for the given element.\r\n * \r\n * @param element The element that will be the root of the fullscreen view.\r\n * @param exitCallback The function to call when leaving fullscreen mode.\r\n *\r\n * @returns A promise that indicates when the operation has completed.\r\n */\r\nexport async function enterFullscreen(element: HTMLElement, exitCallback?: (() => void)): Promise {\r\n try {\r\n if (element.requestFullscreen) {\r\n await element.requestFullscreen();\r\n }\r\n else if (element.mozRequestFullscreen) {\r\n await element.mozRequestFullscreen();\r\n }\r\n else if (element.webkitRequestFullscreen) {\r\n await element.webkitRequestFullscreen();\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n element.classList.add(\"is-fullscreen\");\r\n\r\n const onFullscreenChange = (): void => {\r\n element.classList.remove(\"is-fullscreen\");\r\n\r\n document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\r\n document.removeEventListener(\"mozfullscreenchange\", onFullscreenChange);\r\n document.removeEventListener(\"webkitfullscreenchange\", onFullscreenChange);\r\n\r\n if (exitCallback) {\r\n exitCallback();\r\n }\r\n };\r\n\r\n document.addEventListener(\"fullscreenchange\", onFullscreenChange);\r\n document.addEventListener(\"mozfullscreenchange\", onFullscreenChange);\r\n document.addEventListener(\"webkitfullscreenchange\", onFullscreenChange);\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Checks if any element is currently in fullscreen mode.\r\n * \r\n * @returns True if an element is currently in fullscreen mode in the window; otherwise false.\r\n */\r\nexport function isFullscreen(): boolean {\r\n return !!document.fullscreenElement || !!document.mozFullScreenElement || !!document.webkitFullscreenElement;\r\n}\r\n\r\n/**\r\n * Manually exits fullscreen mode.\r\n * \r\n * @returns True if fullscreen mode was exited; otherwise false.\r\n */\r\nexport async function exitFullscreen(): Promise {\r\n try {\r\n if (document.exitFullscreen) {\r\n await document.exitFullscreen();\r\n }\r\n else if (document.mozCancelFullScreen) {\r\n await document.mozCancelFullScreen();\r\n }\r\n else if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen();\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/* global google */\r\n\r\nimport { DrawingMode, Coordinate, ILatLng, ILatLngLiteral } from \"@Obsidian/Types/Controls/geo\";\r\nimport { GeoPickerSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerSettingsBag\";\r\nimport { GeoPickerGetSettingsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGetSettingsOptionsBag\";\r\nimport { GeoPickerGoogleMapSettingsBag } from \"@Obsidian/ViewModels/Rest/Controls/geoPickerGoogleMapSettingsBag\";\r\nimport { loadJavaScriptAsync } from \"./page\";\r\nimport { post } from \"./http\";\r\n\r\n/**\r\n * Converts a LatLng object, \"lat,lng\" coordinate string, or WellKnown \"lng lat\" coordinate string to a Coordinate array\r\n * @param coord Either a string in \"lat,lng\" format or a LatLng object from Google Maps\r\n * @param isWellKnown True if is \"lng lat\" format, false if it is \"lat, lng\"\r\n *\r\n * @returns Coordinate: Tuple with a Latitude number and Longitude number as the elements\r\n */\r\nexport function toCoordinate(coord: string | ILatLng, isWellKnown: boolean = false): Coordinate {\r\n if (typeof coord == \"string\") {\r\n // WellKnown string format\r\n if (isWellKnown) {\r\n return coord.split(\" \").reverse().map(val => parseFloat(val)) as Coordinate;\r\n }\r\n // Google Maps URL string format\r\n else {\r\n return coord.split(\",\").map(val => parseFloat(val)) as Coordinate;\r\n }\r\n }\r\n else {\r\n return [coord.lat(), coord.lng()];\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Well Known Text value and converts it into a Coordinate array\r\n */\r\nexport function wellKnownToCoordinates(wellKnownText: string, type: DrawingMode): Coordinate[] {\r\n if (wellKnownText == \"\") {\r\n return [];\r\n }\r\n if (type == \"Point\") {\r\n // From this format: POINT (-112.130946 33.600114)\r\n return [toCoordinate(wellKnownText.replace(/(POINT *\\( *)|( *\\) *)/ig, \"\"), true)];\r\n }\r\n else {\r\n // From this format: POLYGON ((-112.157058 33.598563, -112.092341 33.595132, -112.117061 33.608715, -112.124957 33.609286, -112.157058 33.598563))\r\n return wellKnownText.replace(/(POLYGON *\\(+ *)|( *\\)+ *)/ig, \"\").split(/ *, */).map((coord) => toCoordinate(coord, true));\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Well Known Text value and converts it into a Coordinate array\r\n */\r\nexport function coordinatesToWellKnown(coordinates: Coordinate[], type: DrawingMode): string {\r\n if (coordinates.length == 0) {\r\n return \"\";\r\n }\r\n else if (type == \"Point\") {\r\n return `POINT(${coordinates[0].reverse().join(\" \")})`;\r\n }\r\n else {\r\n // DB doesn't work well with the points of a polygon specified in clockwise order for some reason\r\n if (isClockwisePolygon(coordinates)) {\r\n coordinates.reverse();\r\n }\r\n\r\n const coordinateString = coordinates.map(coords => coords.reverse().join(\" \")).join(\", \");\r\n return `POLYGON((${coordinateString}))`;\r\n }\r\n}\r\n\r\n/**\r\n * Takes a Coordinate and uses Geocoding to get nearest address\r\n */\r\nexport function nearAddressForCoordinate(coordinate: Coordinate): Promise {\r\n return new Promise(resolve => {\r\n // only try if google is loaded\r\n if (window.google) {\r\n const geocoder = new google.maps.Geocoder();\r\n geocoder.geocode({ location: new google.maps.LatLng(...coordinate) }, function (results, status) {\r\n if (status == google.maps.GeocoderStatus.OK && results?.[0]) {\r\n resolve(\"near \" + results[0].formatted_address);\r\n }\r\n else {\r\n console.log(\"Geocoder failed due to: \" + status);\r\n resolve(\"\");\r\n }\r\n });\r\n }\r\n else {\r\n resolve(\"\");\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Takes a Coordinate array and uses Geocoding to get nearest address for the first point\r\n */\r\nexport function nearAddressForCoordinates(coordinates: Coordinate[]): Promise {\r\n if (!coordinates || coordinates.length == 0) {\r\n return Promise.resolve(\"\");\r\n }\r\n return nearAddressForCoordinate(coordinates[0]);\r\n}\r\n\r\n/**\r\n * Determine whether the polygon's coordinates are drawn in clockwise order\r\n * Thank you dominoc!\r\n * http://dominoc925.blogspot.com/2012/03/c-code-to-determine-if-polygon-vertices.html\r\n */\r\nexport function isClockwisePolygon(polygon: number[][]): boolean {\r\n let sum = 0;\r\n\r\n for (let i = 0; i < polygon.length - 1; i++) {\r\n sum += (Math.abs(polygon[i + 1][0]) - Math.abs(polygon[i][0])) * (Math.abs(polygon[i + 1][1]) + Math.abs(polygon[i][1]));\r\n }\r\n\r\n return sum > 0;\r\n}\r\n\r\n/**\r\n * Download the necessary resources to run the maps and return the map settings from the API\r\n *\r\n * @param options Options for which data to get from the API\r\n *\r\n * @return Promise with the map settings retrieved from the API\r\n */\r\nexport async function loadMapResources(options: GeoPickerGetSettingsOptionsBag = {}): Promise {\r\n const response = await post(\"/api/v2/Controls/GeoPickerGetGoogleMapSettings\", undefined, options);\r\n const googleMapSettings = response.data ?? {};\r\n\r\n let keyParam = \"\";\r\n\r\n if (googleMapSettings.googleApiKey) {\r\n keyParam = `key=${googleMapSettings.googleApiKey}&`;\r\n }\r\n\r\n await loadJavaScriptAsync(`https://maps.googleapis.com/maps/api/js?${keyParam}libraries=drawing,visualization,geometry`, () => typeof (google) != \"undefined\" && typeof (google.maps) != \"undefined\", {}, false);\r\n\r\n return googleMapSettings;\r\n}\r\n\r\n/**\r\n * Creates a ILatLng object\r\n */\r\nexport function createLatLng(latOrLatLngOrLatLngLiteral: number | ILatLngLiteral | ILatLng, lngOrNoClampNoWrap?: number | boolean | null, noClampNoWrap?: boolean): ILatLng {\r\n return new google.maps.LatLng(latOrLatLngOrLatLngLiteral as number, lngOrNoClampNoWrap, noClampNoWrap);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\r\nimport { newGuid } from \"./guid\";\r\nimport { toNumberOrNull } from \"./numberUtils\";\r\nimport { pluralConditional } from \"./stringUtils\";\r\n\r\ntype Frequency = \"DAILY\" | \"WEEKLY\" | \"MONTHLY\";\r\n\r\n/**\r\n * The day of the week and an interval number for that particular day.\r\n */\r\nexport type WeekdayNumber = {\r\n /** The interval number for this day. */\r\n value: number;\r\n\r\n /** The day of the week. */\r\n day: DayOfWeek;\r\n};\r\n\r\n// Abbreviate nth lookup table.\r\nconst nthNamesAbbreviated: [number, string][] = [\r\n [1, \"1st\"],\r\n [2, \"2nd\"],\r\n [3, \"3rd\"],\r\n [4, \"4th\"],\r\n [-1, \"last\"]\r\n];\r\n\r\n// #region Internal Functions\r\n\r\n/**\r\n * Converts the number to a string and pads the left with zeros to make up\r\n * the minimum required length.\r\n *\r\n * @param value The value to be converted to a string.\r\n * @param length The minimum required length of the final string.\r\n *\r\n * @returns A string that represents the value.\r\n */\r\nfunction padZeroLeft(value: number, length: number): string {\r\n const str = value.toString();\r\n\r\n return \"0\".repeat(length - str.length) + str;\r\n}\r\n\r\n/**\r\n * Get a date-only string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the date portion of the parameter.\r\n */\r\nfunction getDateString(date: RockDateTime): string {\r\n const year = date.year;\r\n const month = date.month;\r\n const day = date.day;\r\n\r\n return `${year}${padZeroLeft(month, 2)}${padZeroLeft(day, 2)}`;\r\n}\r\n\r\n/**\r\n * Gets a time-only string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the time portion of the parameter.\r\n */\r\nfunction getTimeString(date: RockDateTime): string {\r\n const hour = date.hour;\r\n const minute = date.minute;\r\n const second = date.second;\r\n\r\n return `${padZeroLeft(hour, 2)}${padZeroLeft(minute, 2)}${padZeroLeft(second, 2)}`;\r\n}\r\n\r\n/**\r\n * Gets a date and time string that can be used in the iCal format.\r\n *\r\n * @param date The date object to be converted to a string.\r\n *\r\n * @returns A string that represents only the date and time of the parameter.\r\n */\r\nfunction getDateTimeString(date: RockDateTime): string {\r\n return `${getDateString(date)}T${getTimeString(date)}`;\r\n}\r\n\r\n/**\r\n * Gets all the date objects from a range or period string value. This converts\r\n * from an iCal format into a set of date objects.\r\n *\r\n * @param value The string value in iCal format.\r\n *\r\n * @returns An array of date objects that represents the range or period value.\r\n */\r\nfunction getDatesFromRangeOrPeriod(value: string): RockDateTime[] {\r\n const segments = value.split(\"/\");\r\n\r\n if (segments.length === 0) {\r\n return [];\r\n }\r\n\r\n const startDate = getDateFromString(segments[0]);\r\n if (!startDate) {\r\n return [];\r\n }\r\n\r\n if (segments.length !== 2) {\r\n return [startDate];\r\n }\r\n\r\n const dates: RockDateTime[] = [];\r\n\r\n if (segments[1].startsWith(\"P\")) {\r\n // Value is a period so we have a start date and then a period marker\r\n // to tell us how long that date extends.\r\n const days = getPeriodDurationInDays(segments[1]);\r\n\r\n for (let day = 0; day < days; day++) {\r\n const date = startDate.addDays(day);\r\n if (date) {\r\n dates.push(date);\r\n }\r\n }\r\n }\r\n else {\r\n // Value is a date range so we have a start date and then an end date\r\n // and we need to fill in the dates in between.\r\n const endDate = getDateFromString(segments[1]);\r\n\r\n if (endDate !== null) {\r\n let date = startDate;\r\n\r\n while (date <= endDate) {\r\n dates.push(date);\r\n date = date.addDays(1);\r\n }\r\n }\r\n }\r\n\r\n return dates;\r\n}\r\n\r\n/**\r\n * Get a date object that only has the date portion filled in from the iCal\r\n * date string. The time will be set to midnight.\r\n *\r\n * @param value An iCal date value.\r\n *\r\n * @returns A date object that represents the iCal date value.\r\n */\r\nfunction getDateFromString(value: string): RockDateTime | null {\r\n if (value.length < 8) {\r\n return null;\r\n }\r\n\r\n const year = parseInt(value.substring(0, 4));\r\n const month = parseInt(value.substring(4, 6));\r\n const day = parseInt(value.substring(6, 8));\r\n\r\n return RockDateTime.fromParts(year, month, day);\r\n}\r\n\r\n/**\r\n * Get a date object that has both the date and time filled in from the iCal\r\n * date string.\r\n *\r\n * @param value An iCal date value.\r\n *\r\n * @returns A date object that represents the iCal date value.\r\n */\r\nfunction getDateTimeFromString(value: string): RockDateTime | null {\r\n if (value.length < 15 || value[8] !== \"T\") {\r\n return null;\r\n }\r\n\r\n const year = parseInt(value.substring(0, 4));\r\n const month = parseInt(value.substring(4, 6));\r\n const day = parseInt(value.substring(6, 8));\r\n const hour = parseInt(value.substring(9, 11));\r\n const minute = parseInt(value.substring(11, 13));\r\n const second = parseInt(value.substring(13, 15));\r\n\r\n return RockDateTime.fromParts(year, month, day, hour, minute, second);\r\n}\r\n\r\n/**\r\n * Gets an iCal period duration in the number of days.\r\n *\r\n * @param period The iCal period definition.\r\n *\r\n * @returns The number of days found in the definition.\r\n */\r\nfunction getPeriodDurationInDays(period: string): number {\r\n // These are in a format like P1D, P2W, etc.\r\n if (!period.startsWith(\"P\")) {\r\n return 0;\r\n }\r\n\r\n if (period.endsWith(\"D\")) {\r\n return parseInt(period.substring(1, period.length - 1));\r\n }\r\n else if (period.endsWith(\"W\")) {\r\n return parseInt(period.substring(1, period.length - 1)) * 7;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Gets the specific recurrence dates from a RDATE iCal value string.\r\n *\r\n * @param attributes The attributes that were defined on the RDATE property.\r\n * @param value The value of the RDATE property.\r\n *\r\n * @returns An array of date objects found in the RDATE value.\r\n */\r\nfunction getRecurrenceDates(attributes: Record, value: string): RockDateTime[] {\r\n const recurrenceDates: RockDateTime[] = [];\r\n const valueParts = value.split(\",\");\r\n const valueType = attributes[\"VALUE\"];\r\n\r\n for (const valuePart of valueParts) {\r\n if (valueType === \"PERIOD\") {\r\n // Values are stored in period format, such as \"20221005/P1D\".\r\n recurrenceDates.push(...getDatesFromRangeOrPeriod(valuePart));\r\n }\r\n else if (valueType === \"DATE\") {\r\n // Values are date-only values.\r\n const date = getDateFromString(valuePart);\r\n if (date) {\r\n recurrenceDates.push(date);\r\n }\r\n }\r\n else {\r\n // Values are date and time values.\r\n const date = getDateTimeFromString(valuePart);\r\n if (date) {\r\n recurrenceDates.push(date);\r\n }\r\n }\r\n }\r\n\r\n return recurrenceDates;\r\n}\r\n\r\n/**\r\n * Gets the name of the weekday from the iCal abbreviation.\r\n *\r\n * @param day The iCal day abbreviation.\r\n *\r\n * @returns A string that represents the day name.\r\n */\r\nfunction getWeekdayName(day: DayOfWeek): \"Sunday\" | \"Monday\" | \"Tuesday\" | \"Wednesday\" | \"Thursday\" | \"Friday\" | \"Saturday\" | \"Unknown\" {\r\n if (day === DayOfWeek.Sunday) {\r\n return \"Sunday\";\r\n }\r\n else if (day === DayOfWeek.Monday) {\r\n return \"Monday\";\r\n }\r\n else if (day === DayOfWeek.Tuesday) {\r\n return \"Tuesday\";\r\n }\r\n else if (day === DayOfWeek.Wednesday) {\r\n return \"Wednesday\";\r\n }\r\n else if (day === DayOfWeek.Thursday) {\r\n return \"Thursday\";\r\n }\r\n else if (day === DayOfWeek.Friday) {\r\n return \"Friday\";\r\n }\r\n else if (day === DayOfWeek.Saturday) {\r\n return \"Saturday\";\r\n }\r\n else {\r\n return \"Unknown\";\r\n }\r\n}\r\n\r\n/**\r\n * Checks if the date matches one of the weekday options.\r\n *\r\n * @param rockDate The date that must match one of the weekday options.\r\n * @param days The array of weekdays that the date must match.\r\n *\r\n * @returns True if the date matches; otherwise false.\r\n */\r\nfunction dateMatchesDays(rockDate: RockDateTime, days: DayOfWeek[]): boolean {\r\n for (const day of days) {\r\n if (rockDate.dayOfWeek === day) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Checks if the date matches the specifie day of week and also the offset into\r\n * the month for that day.\r\n *\r\n * @param rockDate The date object to be checked.\r\n * @param dayOfWeek The day of week the date must be on.\r\n * @param offsets The offset in week, such as 2 meaning the second 'dayOfWeek' or -1 meaning the last 'dayOfWeek'.\r\n *\r\n * @returns True if the date matches the options; otherwise false.\r\n */\r\nfunction dateMatchesOffsetDayOfWeeks(rockDate: RockDateTime, dayOfWeek: DayOfWeek, offsets: number[]): boolean {\r\n if (!dateMatchesDays(rockDate, [dayOfWeek])) {\r\n return false;\r\n }\r\n\r\n const dayOfMonth = rockDate.day;\r\n\r\n for (const offset of offsets) {\r\n if (offset === 1 && dayOfMonth >= 1 && dayOfMonth <= 7) {\r\n return true;\r\n }\r\n else if (offset === 2 && dayOfMonth >= 8 && dayOfMonth <= 14) {\r\n return true;\r\n }\r\n else if (offset === 3 && dayOfMonth >= 15 && dayOfMonth <= 21) {\r\n return true;\r\n }\r\n else if (offset === 4 && dayOfMonth >= 22 && dayOfMonth <= 28) {\r\n return true;\r\n }\r\n else if (offset === -1) {\r\n const lastDayOfMonth = rockDate.addDays(-(rockDate.day - 1)).addMonths(1).addDays(-1).day;\r\n\r\n if (dayOfMonth >= (lastDayOfMonth - 7) && dayOfMonth <= lastDayOfMonth) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Gets the DayOfWeek value that corresponds to the iCal formatted weekday.\r\n *\r\n * @param day The day of the week to be parsed.\r\n *\r\n * @returns A DayOfWeek value that represents the day.\r\n */\r\nfunction getDayOfWeekFromIcalDay(day: \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\"): DayOfWeek {\r\n switch (day) {\r\n case \"SU\":\r\n return DayOfWeek.Sunday;\r\n\r\n case \"MO\":\r\n return DayOfWeek.Monday;\r\n case \"TU\":\r\n return DayOfWeek.Tuesday;\r\n\r\n case \"WE\":\r\n return DayOfWeek.Wednesday;\r\n\r\n case \"TH\":\r\n return DayOfWeek.Thursday;\r\n\r\n case \"FR\":\r\n return DayOfWeek.Friday;\r\n\r\n case \"SA\":\r\n return DayOfWeek.Saturday;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the iCal abbreviation for the day of the week.\r\n *\r\n * @param day The day of the week to be converted to iCal format.\r\n *\r\n * @returns An iCal representation of the day of week.\r\n */\r\nfunction getiCalDay(day: DayOfWeek): \"SU\" | \"MO\" | \"TU\" | \"WE\" | \"TH\" | \"FR\" | \"SA\" {\r\n switch (day) {\r\n case DayOfWeek.Sunday:\r\n return \"SU\";\r\n\r\n case DayOfWeek.Monday:\r\n return \"MO\";\r\n\r\n case DayOfWeek.Tuesday:\r\n return \"TU\";\r\n\r\n case DayOfWeek.Wednesday:\r\n return \"WE\";\r\n\r\n case DayOfWeek.Thursday:\r\n return \"TH\";\r\n\r\n case DayOfWeek.Friday:\r\n return \"FR\";\r\n\r\n case DayOfWeek.Saturday:\r\n return \"SA\";\r\n }\r\n}\r\n\r\n/**\r\n * Normalizes line length so that none of the individual lines exceed the\r\n * maximum length of 75 charactes from the RFC.\r\n *\r\n * @param lines The array of lines to be normalized.\r\n *\r\n * @returns A new array with the lines normalized for length.\r\n */\r\nfunction normalizeLineLength(lines: string[]): string[] {\r\n const newLines: string[] = [...lines];\r\n\r\n for (let lineNumber = 0; lineNumber < newLines.length; lineNumber++) {\r\n // Spec does not allow lines longer than 75 characters.\r\n if (newLines[lineNumber].length > 75) {\r\n const currentLine = newLines[lineNumber].substring(0, 75);\r\n const newLine = \" \" + newLines[lineNumber].substring(75);\r\n\r\n newLines.splice(lineNumber, 1, currentLine, newLine);\r\n }\r\n }\r\n\r\n return newLines;\r\n}\r\n\r\n/**\r\n * Denormalizes line length so that any continuation lines are appending\r\n * to the previous line for proper parsing.\r\n *\r\n * @param lines The array of lines to be denormalized.\r\n *\r\n * @returns A new array with the lines denormalized.\r\n */\r\nfunction denormalizeLineLength(lines: string[]): string[] {\r\n const newLines: string[] = [...lines];\r\n\r\n for (let lineNumber = 1; lineNumber < newLines.length;) {\r\n if (newLines[lineNumber][0] === \" \") {\r\n newLines[lineNumber - 1] += newLines[lineNumber].substring(1);\r\n newLines.splice(lineNumber, 1);\r\n }\r\n else {\r\n lineNumber++;\r\n }\r\n }\r\n\r\n return newLines;\r\n}\r\n\r\n// #endregion\r\n\r\n/**\r\n * Helper utility to feed lines into ICS parsers.\r\n */\r\nclass LineFeeder {\r\n // #region Properties\r\n\r\n /**\r\n * The denormalzied lines that represent the ICS data.\r\n */\r\n private lines: string[];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new LineFeeder with the given content.\r\n *\r\n * @param content A string that represents raw ICS data.\r\n */\r\n constructor(content: string) {\r\n const lines = content.split(/\\r\\n|\\n|\\r/);\r\n\r\n this.lines = denormalizeLineLength(lines);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Peek at the next line to be read from the feeder.\r\n *\r\n * @returns The next line to be read or null if no more lines remain.\r\n */\r\n public peek(): string | null {\r\n if (this.lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return this.lines[0];\r\n }\r\n\r\n /**\r\n * Pops the next line from the feeder, removing it.\r\n *\r\n * @returns The line that was removed from the feeder or null if no lines remain.\r\n */\r\n public pop(): string | null {\r\n if (this.lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return this.lines.splice(0, 1)[0];\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * Logic and structure for a rule that defines when an even recurs on\r\n * different dates.\r\n */\r\nexport class RecurrenceRule {\r\n // #region Properties\r\n\r\n /**\r\n * The frequency of this recurrence. Only Daily, Weekly and Monthly\r\n * are supported.\r\n */\r\n public frequency?: Frequency;\r\n\r\n /**\r\n * The date at which no more event dates will be generated. This is\r\n * an exclusive date, meaning if an event date lands on this date\r\n * then it will not be included in the list of dates.\r\n */\r\n public endDate?: RockDateTime;\r\n\r\n /**\r\n * The maximum number of dates, including the original date, that\r\n * should be generated.\r\n */\r\n public count?: number;\r\n\r\n /**\r\n * The interval between dates based on the frequency. If this value is\r\n * 2 and frequency is Weekly, then you are asking for \"every other week\".\r\n */\r\n public interval: number = 1;\r\n\r\n /**\r\n * The days of the month the event should recur on. Only a single value\r\n * is supported currently.\r\n */\r\n public byMonthDay: number[] = [];\r\n\r\n /**\r\n * The days of the week the event shoudl recur on.\r\n */\r\n public byDay: WeekdayNumber[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new recurrence rule that can be used to define or adjust the\r\n * recurrence pattern of an event.\r\n *\r\n * @param rule An existing RRULE string from an iCal file.\r\n *\r\n * @returns A new instance that can be used to adjust or define the rule.\r\n */\r\n public constructor(rule: string | undefined = undefined) {\r\n if (!rule) {\r\n return;\r\n }\r\n\r\n // Rule has a format like \"FREQ=DAILY;COUNT=5\" so we split by semicolon\r\n // first and then sub-split by equals character and then stuff everything\r\n // into this values object.\r\n const values: Record = {};\r\n\r\n for (const attr of rule.split(\";\")) {\r\n const attrParts = attr.split(\"=\");\r\n if (attrParts.length === 2) {\r\n values[attrParts[0]] = attrParts[1];\r\n }\r\n }\r\n\r\n // Make sure the values we have are valid.\r\n if (values[\"UNTIL\"] !== undefined && values[\"COUNT\"] !== undefined) {\r\n throw new Error(`Recurrence rule '${rule}' cannot specify both UNTIL and COUNT.`);\r\n }\r\n\r\n if (values[\"FREQ\"] !== \"DAILY\" && values[\"FREQ\"] !== \"WEEKLY\" && values[\"FREQ\"] !== \"MONTHLY\") {\r\n throw new Error(`Invalid frequence for recurrence rule '${rule}'.`);\r\n }\r\n\r\n this.frequency = values[\"FREQ\"];\r\n\r\n if (values[\"UNTIL\"]?.length === 8) {\r\n this.endDate = getDateFromString(values[\"UNTIL\"]) ?? undefined;\r\n }\r\n else if (values[\"UNTIL\"]?.length >= 15) {\r\n this.endDate = getDateTimeFromString(values[\"UNTIL\"]) ?? undefined;\r\n }\r\n\r\n if (values[\"COUNT\"] !== undefined) {\r\n this.count = toNumberOrNull(values[\"COUNT\"]) ?? undefined;\r\n }\r\n\r\n if (values[\"INTERVAL\"] !== undefined) {\r\n this.interval = toNumberOrNull(values[\"INTERVAL\"]) ?? 1;\r\n }\r\n\r\n if (values[\"BYMONTHDAY\"] !== undefined && values[\"BYMONTHDAY\"].length > 0) {\r\n this.byMonthDay = [];\r\n\r\n for (const v of values[\"BYMONTHDAY\"].split(\",\")) {\r\n const num = toNumberOrNull(v);\r\n if (num !== null) {\r\n this.byMonthDay.push(num);\r\n }\r\n }\r\n }\r\n\r\n if (values[\"BYDAY\"] !== undefined && values[\"BYDAY\"].length > 0) {\r\n this.byDay = [];\r\n\r\n for (const v of values[\"BYDAY\"].split(\",\")) {\r\n if (v.length < 2) {\r\n continue;\r\n }\r\n\r\n const num = v.length > 2 ? toNumberOrNull(v.substring(0, v.length - 2)) : 1;\r\n const day = v.substring(v.length - 2);\r\n\r\n if (num === null) {\r\n continue;\r\n }\r\n\r\n if (day === \"SU\" || day === \"MO\" || day === \"TU\" || day == \"WE\" || day == \"TH\" || day == \"FR\" || day == \"SA\") {\r\n this.byDay.push({\r\n value: num,\r\n day: getDayOfWeekFromIcalDay(day)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Builds and returns the RRULE value for an iCal file export.\r\n *\r\n * @returns A RRULE value that represents the recurrence rule.\r\n */\r\n public build(): string {\r\n const attributes: string[] = [];\r\n\r\n attributes.push(`FREQ=${this.frequency}`);\r\n\r\n if (this.count !== undefined) {\r\n attributes.push(`COUNT=${this.count}`);\r\n }\r\n else if (this.endDate) {\r\n attributes.push(`UNTIL=${getDateTimeString(this.endDate)}`);\r\n }\r\n\r\n if (this.interval > 1) {\r\n attributes.push(`INTERVAL=${this.interval}`);\r\n }\r\n\r\n if (this.byMonthDay.length > 0) {\r\n const monthDayValues = this.byMonthDay.map(md => md.toString()).join(\",\");\r\n attributes.push(`BYMONTHDAY=${monthDayValues}`);\r\n }\r\n\r\n if (this.byDay.length > 0) {\r\n const dayValues = this.byDay.map(d => d.value !== 1 ? `${d.value}${getiCalDay(d.day)}` : getiCalDay(d.day));\r\n attributes.push(`BYDAY=${dayValues}`);\r\n }\r\n\r\n return attributes.join(\";\");\r\n }\r\n\r\n /**\r\n * Gets all the dates within the range that match the recurrence rule. A\r\n * maximum of 100,000 dates will be returned by this function.\r\n *\r\n * @param eventStartDateTime The start date and time of the primary event this rule is for.\r\n * @param startDateTime The inclusive starting date and time that events should be returned for.\r\n * @param endDateTime The exclusive ending date and time that events should be returned for.\r\n *\r\n * @returns An array of date objects that represent the additional dates and times for the event.\r\n */\r\n public getDates(eventStartDateTime: RockDateTime, startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\r\n const dates: RockDateTime[] = [];\r\n let rockDate = eventStartDateTime;\r\n let dateCount = 0;\r\n\r\n if (!rockDate) {\r\n return [];\r\n }\r\n\r\n if (this.endDate && this.endDate < endDateTime) {\r\n endDateTime = this.endDate;\r\n }\r\n\r\n while (rockDate < endDateTime && dateCount < 100_000) {\r\n if (this.count && dateCount >= this.count) {\r\n break;\r\n }\r\n\r\n dateCount++;\r\n\r\n if (rockDate >= startDateTime) {\r\n dates.push(rockDate);\r\n }\r\n\r\n const nextDate = this.nextDateAfter(rockDate);\r\n\r\n if (nextDate === null) {\r\n break;\r\n }\r\n else {\r\n rockDate = nextDate;\r\n }\r\n }\r\n\r\n return dates;\r\n }\r\n\r\n /**\r\n * Gets the next valid date after the specified date based on our recurrence\r\n * rules.\r\n *\r\n * @param rockDate The reference date that should be used when calculation the next date.\r\n *\r\n * @returns The next date after the reference date or null if one cannot be determined.\r\n */\r\n private nextDateAfter(rockDate: RockDateTime): RockDateTime | null {\r\n if (this.frequency === \"DAILY\") {\r\n return rockDate.addDays(this.interval);\r\n }\r\n else if (this.frequency === \"WEEKLY\" && this.byDay.length > 0) {\r\n let nextDate = rockDate;\r\n\r\n if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\r\n // On saturday process any skip intervals to move past the next n weeks.\r\n nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\r\n }\r\n else {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n\r\n while (!dateMatchesDays(nextDate, this.byDay.map(d => d.day))) {\r\n if (nextDate.dayOfWeek === DayOfWeek.Saturday) {\r\n // On saturday process any skip intervals to move past the next n weeks.\r\n nextDate = nextDate.addDays(1 + ((this.interval - 1) * 7));\r\n }\r\n else {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n }\r\n\r\n return nextDate;\r\n }\r\n else if (this.frequency === \"MONTHLY\") {\r\n if (this.byMonthDay.length > 0) {\r\n let nextDate = rockDate.addDays(-(rockDate.day - 1));\r\n\r\n if (rockDate.day >= this.byMonthDay[0]) {\r\n nextDate = nextDate.addMonths(this.interval);\r\n }\r\n\r\n let lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\r\n let loopCount = 0;\r\n\r\n // Skip any months that don't have this day number.\r\n while (lastDayOfMonth < this.byMonthDay[0]) {\r\n nextDate = nextDate.addMonths(this.interval);\r\n\r\n lastDayOfMonth = nextDate.addMonths(1).addDays(-1).day;\r\n\r\n // Fail-safe check so we don't get stuck looping forever\r\n // if the rule is one that can't be determined. Such as a\r\n // rule for the 30th day of the month every 12 months\r\n // starting in February.\r\n if (loopCount++ >= 100) {\r\n return null;\r\n }\r\n }\r\n\r\n nextDate = nextDate.addDays(this.byMonthDay[0] - 1);\r\n\r\n return nextDate;\r\n }\r\n else if (this.byDay.length > 0) {\r\n const dayOfWeek = this.byDay[0].day;\r\n const offsets = this.byDay.map(d => d.value);\r\n\r\n let nextDate = rockDate.addDays(1);\r\n\r\n while (!dateMatchesOffsetDayOfWeeks(nextDate, dayOfWeek, offsets)) {\r\n nextDate = nextDate.addDays(1);\r\n }\r\n\r\n return nextDate;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * A single event inside a calendar.\r\n */\r\nexport class Event {\r\n // #region Properties\r\n\r\n /**\r\n * The unique identifier for this schedule used in the scheduled event.\r\n */\r\n public uid?: string;\r\n\r\n /**\r\n * The first date and time that the event occurs on. This must be provided\r\n * before the schedule can be built.\r\n */\r\n public startDateTime?: RockDateTime;\r\n\r\n /**\r\n * The end date and time for the event. This must be provided before\r\n * this schedule can be built.\r\n */\r\n public endDateTime?: RockDateTime;\r\n\r\n /**\r\n * An array of dates to be excluded from the recurrence rules.\r\n */\r\n public excludedDates: RockDateTime[] = [];\r\n\r\n /**\r\n * An array of specific dates that this schedule will recur on. This is\r\n * only valid if recurrenceRules contains no rules.\r\n */\r\n public recurrenceDates: RockDateTime[] = [];\r\n\r\n /**\r\n * The rules that define when this schedule recurs on for additional dates.\r\n * Only the first rule is currently supported.\r\n */\r\n public recurrenceRules: RecurrenceRule[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new internet calendar event.\r\n *\r\n * @param icsContent The content from the ICS file that represents this single event.\r\n *\r\n * @returns A new Event instance.\r\n */\r\n public constructor(icsContent: string | LineFeeder | undefined = undefined) {\r\n if (icsContent === undefined) {\r\n this.uid = newGuid();\r\n return;\r\n }\r\n\r\n let feeder: LineFeeder;\r\n\r\n if (typeof icsContent === \"string\") {\r\n feeder = new LineFeeder(icsContent);\r\n }\r\n else {\r\n feeder = icsContent;\r\n }\r\n\r\n this.parse(feeder);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Build the event as a list of individual lines that make up the event in\r\n * the ICS file format.\r\n *\r\n * @returns An array of lines to be inserted into an ICS file.\r\n */\r\n public buildLines(): string[] {\r\n if (!this.startDateTime || !this.endDateTime) {\r\n return [];\r\n }\r\n\r\n const lines: string[] = [];\r\n\r\n lines.push(\"BEGIN:VEVENT\");\r\n lines.push(`DTEND:${getDateTimeString(this.endDateTime)}`);\r\n lines.push(`DTSTAMP:${getDateTimeString(RockDateTime.now())}`);\r\n lines.push(`DTSTART:${getDateTimeString(this.startDateTime)}`);\r\n\r\n if (this.excludedDates.length > 0) {\r\n lines.push(`EXDATE:${this.excludedDates.map(d => getDateString(d) + \"/P1D\").join(\",\")}`);\r\n }\r\n\r\n if (this.recurrenceDates.length > 0) {\r\n const recurrenceDates: string[] = [];\r\n for (const date of this.recurrenceDates) {\r\n const rDate = RockDateTime.fromParts(date.year, date.month, date.day, this.startDateTime.hour, this.startDateTime.minute, this.startDateTime.second);\r\n if (rDate) {\r\n recurrenceDates.push(getDateTimeString(rDate));\r\n }\r\n }\r\n\r\n lines.push(`RDATE:${recurrenceDates.join(\",\")}`);\r\n }\r\n else if (this.recurrenceRules.length > 0) {\r\n for (const rrule of this.recurrenceRules) {\r\n lines.push(`RRULE:${rrule.build()}`);\r\n }\r\n }\r\n\r\n lines.push(\"SEQUENCE:0\");\r\n lines.push(`UID:${this.uid}`);\r\n lines.push(\"END:VEVENT\");\r\n\r\n return lines;\r\n }\r\n\r\n /**\r\n * Builds the event into a string that conforms to ICS format.\r\n *\r\n * @returns An ICS formatted string that represents the event data.\r\n */\r\n public build(): string | null {\r\n const lines = this.buildLines();\r\n\r\n if (lines.length === 0) {\r\n return null;\r\n }\r\n\r\n return normalizeLineLength(lines).join(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Parse data from an existing event and store it on this instance.\r\n *\r\n * @param feeder The feeder that will provide the line data for parsing.\r\n */\r\n private parse(feeder: LineFeeder): void {\r\n let duration: string | null = null;\r\n let line: string | null;\r\n\r\n // Verify this is an event.\r\n if (feeder.peek() !== \"BEGIN:VEVENT\") {\r\n throw new Error(\"Invalid event.\");\r\n }\r\n\r\n feeder.pop();\r\n\r\n // Parse the line until we run out of lines or see an END line.\r\n while ((line = feeder.pop()) !== null) {\r\n if (line === \"END:VEVENT\") {\r\n break;\r\n }\r\n\r\n const splitAt = line.indexOf(\":\");\r\n if (splitAt < 0) {\r\n continue;\r\n }\r\n\r\n let key = line.substring(0, splitAt);\r\n const value = line.substring(splitAt + 1);\r\n\r\n const keyAttributes: Record = {};\r\n const keySegments = key.split(\";\");\r\n if (keySegments.length > 1) {\r\n key = keySegments[0];\r\n keySegments.splice(0, 1);\r\n\r\n for (const attr of keySegments) {\r\n const attrSegments = attr.split(\"=\");\r\n if (attr.length === 2) {\r\n keyAttributes[attrSegments[0]] = attrSegments[1];\r\n }\r\n }\r\n }\r\n\r\n if (key === \"DTSTART\") {\r\n this.startDateTime = getDateTimeFromString(value) ?? undefined;\r\n }\r\n else if (key === \"DTEND\") {\r\n this.endDateTime = getDateTimeFromString(value) ?? undefined;\r\n }\r\n else if (key === \"RRULE\") {\r\n this.recurrenceRules.push(new RecurrenceRule(value));\r\n }\r\n else if (key === \"RDATE\") {\r\n this.recurrenceDates = getRecurrenceDates(keyAttributes, value);\r\n }\r\n else if (key === \"UID\") {\r\n this.uid = value;\r\n }\r\n else if (key === \"DURATION\") {\r\n duration = value;\r\n }\r\n else if (key === \"EXDATE\") {\r\n const dateValues = value.split(\",\");\r\n for (const dateValue of dateValues) {\r\n const dates = getDatesFromRangeOrPeriod(dateValue);\r\n this.excludedDates.push(...dates);\r\n }\r\n }\r\n }\r\n\r\n if (duration !== null) {\r\n // TODO: Calculate number of seconds and add to startDate.\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the date is listed in one of the excluded dates. This\r\n * currently only checks the excludedDates but in the future might also\r\n * check the excluded rules.\r\n *\r\n * @param rockDate The date to be checked to see if it is excluded.\r\n *\r\n * @returns True if the date is excluded; otherwise false.\r\n */\r\n private isDateExcluded(rockDate: RockDateTime): boolean {\r\n const rockDateOnly = rockDate.date;\r\n\r\n for (const excludedDate of this.excludedDates) {\r\n if (excludedDate.date.isEqualTo(rockDateOnly)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get all the dates for this event that fall within the specified date range.\r\n *\r\n * @param startDateTime The inclusive starting date to use when filtering event dates.\r\n * @param endDateTime The exclusive endign date to use when filtering event dates.\r\n *\r\n * @returns An array of dates that fall between startDateTime and endDateTime.\r\n */\r\n public getDates(startDateTime: RockDateTime, endDateTime: RockDateTime): RockDateTime[] {\r\n if (!this.startDateTime) {\r\n return [];\r\n }\r\n\r\n // If the schedule has a startDateTime that is later than the requested\r\n // startDateTime then use ours instead.\r\n if (this.startDateTime > startDateTime) {\r\n startDateTime = this.startDateTime;\r\n }\r\n\r\n if (this.recurrenceDates.length > 0) {\r\n const dates: RockDateTime[] = [];\r\n const recurrenceDates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\r\n\r\n for (const date of recurrenceDates) {\r\n if (date >= startDateTime && date < endDateTime) {\r\n dates.push(date);\r\n }\r\n }\r\n\r\n return dates;\r\n }\r\n else if (this.recurrenceRules.length > 0) {\r\n const rrule = this.recurrenceRules[0];\r\n\r\n return rrule.getDates(this.startDateTime, startDateTime, endDateTime)\r\n .filter(d => !this.isDateExcluded(d));\r\n }\r\n else {\r\n if (this.startDateTime >= startDateTime && this.startDateTime < endDateTime) {\r\n return [this.startDateTime];\r\n }\r\n\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Get the friendly text string that represents this event. This will be a\r\n * plain text string with no formatting applied.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n public toFriendlyText(): string {\r\n return this.toFriendlyString(false);\r\n }\r\n\r\n /**\r\n * Get the friendly HTML string that represents this event. This will be\r\n * formatted with HTML to make the information easier to read.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n public toFriendlyHtml(): string {\r\n return this.toFriendlyString(true);\r\n }\r\n\r\n /**\r\n * Get the friendly string that can be easily understood by a human.\r\n *\r\n * @param html If true then the string can contain HTML content to make things easier to read.\r\n *\r\n * @returns A string that represents the event in a human friendly manner.\r\n */\r\n private toFriendlyString(html: boolean): string {\r\n if (!this.startDateTime) {\r\n return \"\";\r\n }\r\n\r\n const startTimeText = this.startDateTime.toLocaleString({ hour: \"numeric\", minute: \"2-digit\", hour12: true });\r\n\r\n if (this.recurrenceRules.length > 0) {\r\n const rrule = this.recurrenceRules[0];\r\n\r\n if (rrule.frequency === \"DAILY\") {\r\n let result = \"Daily\";\r\n\r\n if (rrule.interval > 1) {\r\n result += ` every ${rrule.interval} ${pluralConditional(rrule.interval, \"day\", \"days\")}`;\r\n }\r\n\r\n result += ` at ${startTimeText}`;\r\n\r\n return result;\r\n }\r\n else if (rrule.frequency === \"WEEKLY\") {\r\n if (rrule.byDay.length === 0) {\r\n return \"No Scheduled Days\";\r\n }\r\n\r\n let result = rrule.byDay.map(d => getWeekdayName(d.day) + \"s\").join(\",\");\r\n\r\n if (rrule.interval > 1) {\r\n result = `Every ${rrule.interval} weeks: ${result}`;\r\n }\r\n else {\r\n result = `Weekly: ${result}`;\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else if (rrule.frequency === \"MONTHLY\") {\r\n if (rrule.byMonthDay.length > 0) {\r\n let result = `Day ${rrule.byMonthDay[0]} of every `;\r\n\r\n if (rrule.interval > 1) {\r\n result += `${rrule.interval} months`;\r\n }\r\n else {\r\n result += \"month\";\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else if (rrule.byDay.length > 0) {\r\n const byDay = rrule.byDay[0];\r\n const offsetNames = nthNamesAbbreviated.filter(n => rrule.byDay.some(d => d.value == n[0])).map(n => n[1]);\r\n let result = \"\";\r\n\r\n if (offsetNames.length > 0) {\r\n let nameText: string;\r\n\r\n if (offsetNames.length > 2) {\r\n nameText = `${offsetNames.slice(0, offsetNames.length - 1).join(\", \")} and ${offsetNames[offsetNames.length - 1]}`;\r\n }\r\n else {\r\n nameText = offsetNames.join(\" and \");\r\n }\r\n result = `The ${nameText} ${getWeekdayName(byDay.day)} of every month`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n\r\n return `${result} at ${startTimeText}`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else {\r\n const dates: RockDateTime[] = [this.startDateTime, ...this.recurrenceDates];\r\n\r\n if (dates.length === 1) {\r\n return `Once at ${this.startDateTime.toASPString(\"g\")}`;\r\n }\r\n else if (!html || dates.length > 99) {\r\n const firstDate = dates[0];\r\n const lastDate = dates[dates.length - 1];\r\n\r\n if (firstDate && lastDate) {\r\n return `Multiple dates between ${firstDate.toASPString(\"g\")} and ${lastDate.toASPString(\"g\")}`;\r\n }\r\n else {\r\n return \"\";\r\n }\r\n }\r\n else if (dates.length > 1) {\r\n let listHtml = `
    `;\r\n\r\n for (const date of dates) {\r\n listHtml += `
  • ${date.toASPString(\"g\")}
  • `;\r\n }\r\n\r\n listHtml += \"\";\r\n\r\n return listHtml;\r\n }\r\n else {\r\n return \"No Schedule\";\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n}\r\n\r\n/**\r\n * A recurring schedule allows schedules to be built and customized from the iCal\r\n * format used in ics files.\r\n */\r\nexport class Calendar {\r\n // #region Properties\r\n\r\n /**\r\n * The events that exist for this calendar.\r\n */\r\n public events: Event[] = [];\r\n\r\n // #endregion\r\n\r\n // #region Constructors\r\n\r\n /**\r\n * Creates a new Calendar instance.\r\n *\r\n * @param icsContent The content from an ICS file to initialize the calendar with.\r\n *\r\n * @returns A new Calendar instance.\r\n */\r\n public constructor(icsContent: string | undefined = undefined) {\r\n if (icsContent === undefined) {\r\n return;\r\n }\r\n\r\n const feeder = new LineFeeder(icsContent);\r\n\r\n this.parse(feeder);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Functions\r\n\r\n /**\r\n * Builds the calendar into a string that conforms to ICS format.\r\n *\r\n * @returns An ICS formatted string that represents the calendar data.\r\n */\r\n public build(): string | null {\r\n const lines: string[] = [];\r\n\r\n lines.push(\"BEGIN:VCALENDAR\");\r\n lines.push(\"PRODID:-//github.com/SparkDevNetwork/Rock//NONSGML Rock//EN\");\r\n lines.push(\"VERSION:2.0\");\r\n\r\n for (const event of this.events) {\r\n lines.push(...event.buildLines());\r\n }\r\n\r\n lines.push(\"END:VCALENDAR\");\r\n\r\n return denormalizeLineLength(lines).join(\"\\r\\n\");\r\n }\r\n\r\n /**\r\n * Parses the ICS data from a line feeder and constructs the calendar\r\n * from that data.\r\n *\r\n * @param feeder The feeder that provides the individual lines.\r\n */\r\n private parse(feeder: LineFeeder): void {\r\n let line: string | null;\r\n\r\n // Parse the line data.\r\n while ((line = feeder.peek()) !== null) {\r\n if (line === \"BEGIN:VEVENT\") {\r\n const event = new Event(feeder);\r\n\r\n this.events.push(event);\r\n }\r\n else {\r\n feeder.pop();\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { MergeFieldPickerFormatSelectedValueOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerFormatSelectedValueOptionsBag\";\r\nimport { useHttp } from \"./http\";\r\n\r\n/**\r\n * Take a given mergeFieldPicker value and format it for Lava\r\n *\r\n * @param value The merge field to be formatted\r\n *\r\n * @returns The formatted string in a Promise\r\n */\r\nexport async function formatValue(value: string): Promise {\r\n const http = useHttp();\r\n\r\n const options: MergeFieldPickerFormatSelectedValueOptionsBag = {\r\n selectedValue: value\r\n };\r\n\r\n const response = await http.post(\"/api/v2/Controls/MergeFieldPickerFormatSelectedValue\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.error(\"Error\", response.errorMessage || `Error formatting '${value}'.`);\r\n return \"\";\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nexport function fromEntries(entries: Iterable<[PropertyKey, string]>): Record {\r\n const res = {};\r\n for (const entry of entries) {\r\n res[entry[0]] = entry[1];\r\n }\r\n return res;\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport Cache from \"./cache\";\r\nimport { useHttp } from \"./http\";\r\nimport { PhoneNumberBoxGetConfigurationResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationResultsBag\";\r\nimport { PhoneNumberCountryCodeRulesConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberCountryCodeRulesConfigurationBag\";\r\n\r\nconst http = useHttp();\r\n\r\n/**\r\n * Fetch the configuration for phone numbers and their possible formats for different countries\r\n */\r\nasync function fetchPhoneNumberConfiguration(): Promise {\r\n const result = await http.post(\"/api/v2/Controls/PhoneNumberBoxGetConfiguration\", undefined, null);\r\n\r\n if (result.isSuccess && result.data) {\r\n return result.data;\r\n }\r\n\r\n throw new Error(result.errorMessage ?? \"Error fetching phone number configuration\");\r\n}\r\n\r\n/**\r\n * Fetch the configuration for phone numbers and their possible formats for different countries.\r\n * Cacheable version of fetchPhoneNumberConfiguration cacheable\r\n */\r\nexport const getPhoneNumberConfiguration = Cache.cachePromiseFactory(\"phoneNumberConfiguration\", fetchPhoneNumberConfiguration);\r\n\r\nconst defaultRulesConfig = [\r\n {\r\n \"match\": \"^(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"$1-$2\"\r\n },\r\n {\r\n \"match\": \"^(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"($1) $2-$3\"\r\n },\r\n {\r\n \"match\": \"^1(\\\\d{3})(\\\\d{3})(\\\\d{4})$\",\r\n \"format\": \"($1) $2-$3\"\r\n }\r\n];\r\n\r\n/**\r\n * Format a phone number according to a given configuration\r\n *\r\n * e.g. from the default configuration:\r\n * 3214567 => 321-4567\r\n * 3214567890 => (321) 456-7890\r\n */\r\nexport function formatPhoneNumber(value: string, rules: PhoneNumberCountryCodeRulesConfigurationBag[] = defaultRulesConfig): string {\r\n value = stripPhoneNumber(value);\r\n\r\n if (!value || rules.length == 0) {\r\n return value;\r\n }\r\n\r\n for (const rule of rules) {\r\n const regex = new RegExp(rule.match ?? \"\");\r\n\r\n if (regex.test(value)) {\r\n return value.replace(regex, rule.format ?? \"\") || value;\r\n }\r\n }\r\n\r\n return value;\r\n}\r\n\r\n/**\r\n * Strips special characters from the phone number.\r\n * (321) 456-7890 => 3214567890\r\n * @param str\r\n */\r\nexport function stripPhoneNumber(str: string): string {\r\n if (!str) {\r\n return \"\";\r\n }\r\n\r\n return str.replace(/\\D/g, \"\");\r\n}\r\n\r\nexport default {\r\n getPhoneNumberConfiguration,\r\n formatPhoneNumber,\r\n stripPhoneNumber\r\n};\r\n\r\n/* eslint-disable */\r\n// @ts-ignore\r\nwindow.formatPhoneNumber = formatPhoneNumber;","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n\r\n// NOTE: Do not make this public yet. This is essentially temporary and\r\n// will likely move to a different place and be merged with the tooltip\r\n// concept code as well.\r\ntype PopoverOptions = {\r\n /** Allow HTML content in the popover. */\r\n html?: boolean;\r\n\r\n /** Enables santization of HTML content. */\r\n sanitize?: boolean;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare const $: any;\r\n\r\n/**\r\n * Configure a popover for the specified node or nodes to show on hover. This\r\n * currently uses Bootstrap popovers but may be changed to use a different\r\n * method later.\r\n * \r\n * @param node The node or nodes to have popovers configured on.\r\n * @param options The options that describe how the popovers should behave.\r\n */\r\nexport function popover(node: Element | Element[], options?: PopoverOptions): void {\r\n // If we got an array of elements then activate each one.\r\n if (Array.isArray(node)) {\r\n for (const n of node) {\r\n popover(n, options);\r\n }\r\n\r\n return;\r\n }\r\n\r\n $(node).popover({\r\n html: options?.html,\r\n sanitize: options?.sanitize ?? true\r\n });\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n/**\r\n * Returns a promise that completes after the specified number of milliseconds\r\n * have ellapsed.\r\n * \r\n * @param ms The number of milliseconds to wait.\r\n * \r\n * @returns A promise that completes after the interval has ellapsed.\r\n */\r\nexport function sleep(ms: number): Promise {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\n/**\r\n * Checks if the value is a promise to return a value. This is used to check\r\n * if a function that could have returned either a value or a promise for a\r\n * value returned a promise.\r\n * \r\n * @param obj The object to be tested if it is a promise.\r\n *\r\n * @returns True if the object is a promise.\r\n */\r\nexport function isPromise(obj: PromiseLike | T): obj is PromiseLike {\r\n return !!obj && (typeof obj === \"object\" || typeof obj === \"function\") && typeof (obj as Record).then === \"function\";\r\n}\r\n\r\n/**\r\n * A class that provides a way to defer execution via await until some\r\n * external trigger happens.\r\n */\r\nexport class PromiseCompletionSource {\r\n private internalPromise: Promise;\r\n\r\n private internalResolve: (T) => void = () => { /* Intentionally blank. */ };\r\n\r\n private internalReject: (reason?: unknown) => void = () => { /* Intentionally blank. */ };\r\n\r\n constructor() {\r\n this.internalPromise = new Promise((resolve, reject) => {\r\n this.internalResolve = resolve;\r\n this.internalReject = reject;\r\n });\r\n }\r\n\r\n /** The promise that can be awaited. */\r\n public get promise(): Promise {\r\n return this.internalPromise;\r\n }\r\n\r\n /**\r\n * Resolves the promise with the given value.\r\n * \r\n * @param value The value to be returned by the await call.\r\n */\r\n public resolve(value: T): void {\r\n this.internalResolve(value);\r\n }\r\n\r\n /**\r\n * Rejects the promise and throws the reason as an error.\r\n * \r\n * @param reason The reason to be thrown by the await call.\r\n */\r\n public reject(reason?: unknown): void {\r\n this.internalReject(reason);\r\n }\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { loadJavaScriptAsync } from \"./page\";\r\n\r\n// Disable certain checks as they are needed to interface with existing JS file.\r\n/* eslint-disable @typescript-eslint/ban-types */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n/** A generic set a server functions with no type checking. */\r\nexport type GenericServerFunctions = {\r\n [name: string]: (...args: unknown[]) => unknown;\r\n};\r\n\r\n/** A set of specific server functions that conform to an interface. */\r\nexport type ServerFunctions = {\r\n [K in keyof T]: T[K] extends Function ? T[K] : never;\r\n};\r\n\r\n/**\r\n * An object that allows RealTime communication between the browser and the Rock\r\n * server over a specific topic.\r\n */\r\nexport interface ITopic = GenericServerFunctions> {\r\n /**\r\n * Allows messages to be sent to the server. Any property access is treated\r\n * like a message function whose property name is the message name.\r\n */\r\n server: TServer;\r\n\r\n /**\r\n * Gets the connection identifier for this topic. This will be the same for\r\n * all topics, but that should not be relied on staying that way in the future.\r\n */\r\n get connectionId(): string | null;\r\n\r\n /**\r\n * Gets a value that indicates if the topic is currently reconnecting.\r\n */\r\n get isReconnecting(): boolean;\r\n\r\n /**\r\n * Gets a value that indicates if the topic is disconnected and will no\r\n * longer try to connect to the server.\r\n */\r\n get isDisconnected(): boolean;\r\n\r\n /**\r\n * Registers a handler to be called when a message with the given name\r\n * is received.\r\n *\r\n * @param messageName The message name that will trigger the handler.\r\n * @param handler The handler to be called when a message is received.\r\n */\r\n on(messageName: string, handler: ((...args: any[]) => void)): void;\r\n\r\n /**\r\n * Registers a handler to be called when any message is received.\r\n *\r\n * @param handler The handler to be called when a message is received.\r\n */\r\n onMessage(handler: ((messageName: string, args: unknown[]) => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been\r\n * temporarily lost. An automatic reconnection is in progress. The topic\r\n * is now in a state where it can not send any messages.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onReconnecting(callback: (() => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been\r\n * reconnected. The topic can now send messages again.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onReconnected(callback: (() => void)): void;\r\n\r\n /**\r\n * Registers a callback to be called when the connection has been lost\r\n * and will no longer try to reconnect.\r\n *\r\n * @param callback The callback to be called.\r\n */\r\n onDisconnected(callback: (() => void)): void;\r\n}\r\n\r\ninterface IRockRealTimeStatic {\r\n getTopic>(identifier: string): Promise>;\r\n}\r\n\r\nlet libraryObject: IRockRealTimeStatic | null = null;\r\nlet libraryPromise: Promise | null = null;\r\n\r\n/**\r\n * Gets the real time object from window.Rock.RealTime. If it is not available\r\n * then an exception will be thrown.\r\n *\r\n * @returns An instance of IRockRealTimeStatic.\r\n */\r\nasync function getRealTimeObject(): Promise {\r\n if (libraryObject) {\r\n return libraryObject;\r\n }\r\n\r\n if (!libraryPromise) {\r\n libraryPromise = loadJavaScriptAsync(\"/Scripts/Rock/realtime.js\", () => !!window[\"Rock\"]?.[\"RealTime\"]);\r\n }\r\n\r\n if (!await libraryPromise) {\r\n throw new Error(\"Unable to load RealTime library.\");\r\n }\r\n\r\n libraryObject = window[\"Rock\"]?.[\"RealTime\"] as IRockRealTimeStatic;\r\n\r\n return libraryObject;\r\n}\r\n\r\n/**\r\n * Connects to a specific topic in the Rock RealTime system and returns an\r\n * instance to a proxy that handles sending to and receiving messages from\r\n * that specific topic.\r\n *\r\n * @param identifier The identifier of the topic to be connected to.\r\n *\r\n * @returns A proxy to handle communication with the topic.\r\n */\r\nexport async function getTopic>(identifier: string): Promise> {\r\n const realTime = await getRealTimeObject();\r\n\r\n return realTime.getTopic(identifier);\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { toNumber, toNumberOrNull } from \"./numberUtils\";\r\nimport { SlidingDateRangeType as RangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\r\nimport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\r\nimport { DayOfWeek, RockDateTime } from \"./rockDateTime\";\r\n\r\n// This file contains helper functions and tooling required to work with sliding\r\n// date ranges. A sliding date range is one that, generally, is anchored to whatever\r\n// the current date and time is when the check is made. For example, \"within the next\r\n// 5 days\" would be the english equivalent of a sliding date range.\r\n\r\n/**\r\n * The enums have been moved to separate files in order to share with the back end. We import them\r\n * above (with the names used by the definitions that used to exist in this file) so they can be\r\n * used below and we export them here so that any files previously importing them from here\r\n * do not break.\r\n */\r\nexport { SlidingDateRangeType as RangeType } from \"@Obsidian/Enums/Controls/slidingDateRangeType\";\r\nexport { TimeUnitType as TimeUnit } from \"@Obsidian/Enums/Controls/timeUnitType\";\r\n\r\n/**\r\n * Specifies the information required to track a sliding date range.\r\n */\r\nexport type SlidingDateRange = {\r\n /** The type of sliding date range represented by this instance. */\r\n rangeType: RangeType;\r\n\r\n /** The unit of time represented by the timeValue property. */\r\n timeUnit?: TimeUnit;\r\n\r\n /** The number of time units used when calculating the date range. */\r\n timeValue?: number;\r\n\r\n /** The lower value of a specific date range. */\r\n lowerDate?: string;\r\n\r\n /** The upper value of a specific date range. */\r\n upperDate?: string;\r\n};\r\n\r\n/**\r\n * The sliding date range types represented as an array of ListItemBag objects.\r\n * These are ordered correctly and can be used in pickers.\r\n */\r\nexport const rangeTypeOptions: ListItemBag[] = [\r\n {\r\n value: RangeType.Current.toString(),\r\n text: \"Current\"\r\n },\r\n {\r\n value: RangeType.Previous.toString(),\r\n text: \"Previous\"\r\n },\r\n {\r\n value: RangeType.Last.toString(),\r\n text: \"Last\"\r\n },\r\n {\r\n value: RangeType.Next.toString(),\r\n text: \"Next\"\r\n },\r\n {\r\n value: RangeType.Upcoming.toString(),\r\n text: \"Upcoming\"\r\n },\r\n {\r\n value: RangeType.DateRange.toString(),\r\n text: \"Date Range\"\r\n }\r\n];\r\n\r\n/**\r\n * The sliding date range time units represented as an array of ListItemBag objects.\r\n * These are ordered correctly and can be used in pickers.\r\n */\r\nexport const timeUnitOptions: ListItemBag[] = [\r\n {\r\n value: TimeUnit.Hour.toString(),\r\n text: \"Hour\"\r\n },\r\n {\r\n value: TimeUnit.Day.toString(),\r\n text: \"Day\"\r\n },\r\n {\r\n value: TimeUnit.Week.toString(),\r\n text: \"Week\"\r\n },\r\n {\r\n value: TimeUnit.Month.toString(),\r\n text: \"Month\"\r\n },\r\n {\r\n value: TimeUnit.Year.toString(),\r\n text: \"Year\"\r\n },\r\n];\r\n\r\n/**\r\n * Helper function to get the text from a ListItemBag that matches the value.\r\n *\r\n * @param value The value to be searched for.\r\n * @param options The ListItemBag options to be searched.\r\n *\r\n * @returns The text value of the ListItemBag or an empty string if not found.\r\n */\r\nfunction getTextForValue(value: string, options: ListItemBag[]): string {\r\n const matches = options.filter(v => v.value === value);\r\n\r\n return matches.length > 0 ? matches[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Gets the user friendly text that represents the RangeType value.\r\n *\r\n * @param rangeType The RangeType value to be represented.\r\n *\r\n * @returns A human readable string that represents the RangeType value.\r\n */\r\nexport function getRangeTypeText(rangeType: RangeType): string {\r\n const rangeTypes = rangeTypeOptions.filter(o => o.value === rangeType.toString());\r\n\r\n return rangeTypes.length > 0 ? rangeTypes[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Gets the user friendly text that represents the TimeUnit value.\r\n *\r\n * @param timeUnit The TimeUnit value to be represented.\r\n *\r\n * @returns A human readable string that represents the TimeUnit value.\r\n */\r\nexport function getTimeUnitText(timeUnit: TimeUnit): string {\r\n const timeUnits = timeUnitOptions.filter(o => o.value === timeUnit.toString());\r\n\r\n return timeUnits.length > 0 ? timeUnits[0].text ?? \"\" : \"\";\r\n}\r\n\r\n/**\r\n * Parses a pipe delimited string into a SlidingDateRange native object. The\r\n * delimited string is a format used by attribute values and other places.\r\n *\r\n * @param value The pipe delimited string that should be parsed.\r\n *\r\n * @returns A SlidingDaterange object or null if the string could not be parsed.\r\n */\r\nexport function parseSlidingDateRangeString(value: string): SlidingDateRange | null {\r\n const segments = value.split(\"|\");\r\n\r\n if (segments.length < 3) {\r\n return null;\r\n }\r\n\r\n // Find the matching range types and time units (should be 0 or 1) that\r\n // match the values in the string.\r\n const rangeTypes = rangeTypeOptions.filter(o => (o.text ?? \"\").replace(\" \", \"\").toLowerCase() === segments[0].toLowerCase() || o.value === segments[0]);\r\n const timeUnits = timeUnitOptions.filter(o => (o.text ?? \"\").toLowerCase() === segments[2].toLowerCase() || o.value === segments[2]);\r\n\r\n if (rangeTypes.length === 0) {\r\n return null;\r\n }\r\n\r\n const range: SlidingDateRange = {\r\n rangeType: toNumber(rangeTypes[0].value)\r\n };\r\n\r\n // If the range type is one that has time units then parse the time units.\r\n if (([RangeType.Current, RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\r\n range.timeUnit = timeUnits.length > 0 ? toNumber(timeUnits[0].value) as TimeUnit : TimeUnit.Hour;\r\n\r\n // If the range type is one that has time values then parse the time value.\r\n if (([RangeType.Last, RangeType.Next, RangeType.Previous, RangeType.Upcoming] as number[]).includes(range.rangeType)) {\r\n range.timeValue = toNumberOrNull(segments[1]) ?? 1;\r\n }\r\n }\r\n\r\n // Parse the lower and upper dates if our range type is a DateRange.\r\n if (range.rangeType === RangeType.DateRange) {\r\n if (segments.length > 3) {\r\n range.lowerDate = segments[3];\r\n }\r\n\r\n if (segments.length > 4) {\r\n range.upperDate = segments[4];\r\n }\r\n }\r\n\r\n return range;\r\n}\r\n\r\n/**\r\n * Convert a SlidingDateRange object into a pipe delimited string that represents\r\n * the object. This string representation is used in attribute values as well as\r\n * other places in Rock.\r\n *\r\n * @param value The SlidingDateRange object to be represented as a string.\r\n *\r\n * @returns A string that represents the SlidingDateRange object.\r\n */\r\nexport function slidingDateRangeToString(value: SlidingDateRange): string {\r\n switch (value.rangeType) {\r\n case RangeType.Current:\r\n return `Current||${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\r\n\r\n case RangeType.DateRange:\r\n return `DateRange|||${value.lowerDate ?? \"\"}|${value.upperDate ?? \"\"}`;\r\n\r\n default:\r\n return `${getTextForValue(value.rangeType.toString(), rangeTypeOptions)}|${value.timeValue ?? \"\"}|${getTextForValue(value.timeUnit?.toString() ?? \"\", timeUnitOptions)}||`;\r\n }\r\n}\r\n\r\n/**\r\n * Calculates the start and end dates in a sliding date range.\r\n *\r\n * @param value The sliding date range to use when calculating dates.\r\n * @param currentDateTime The date and time to use in any \"now\" calculations.\r\n *\r\n * @returns An object that contains the start and end dates and times.\r\n */\r\nexport function calculateSlidingDateRange(value: SlidingDateRange, currentDateTime: RockDateTime | null | undefined = undefined): { start: RockDateTime | null, end: RockDateTime | null } {\r\n const result: { start: RockDateTime | null, end: RockDateTime | null } = {\r\n start: null,\r\n end: null\r\n };\r\n\r\n if (!currentDateTime) {\r\n currentDateTime = RockDateTime.now();\r\n }\r\n\r\n if (value.rangeType === RangeType.Current) {\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0);\r\n result.end = result.start?.addHours(1) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.start = currentDateTime.date;\r\n result.end = result.start.addDays(1);\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.start = currentDateTime.addDays(-1 * diff).date;\r\n result.end = result.start.addDays(7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1);\r\n result.end = result.start?.addMonths(1) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1);\r\n result.end = RockDateTime.fromParts(currentDateTime.year + 1, 1, 1);\r\n }\r\n }\r\n else if (value.rangeType === RangeType.Last || value.rangeType === RangeType.Previous) {\r\n // The number of time units to adjust by.\r\n const count = value.timeValue ?? 1;\r\n\r\n // If we are getting \"Last\" then round up to include the\r\n // current day/week/month/year.\r\n const roundUpCount = value.rangeType === RangeType.Last ? 1 : 0;\r\n\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\r\n ?.addHours(roundUpCount) ?? null;\r\n result.start = result.end?.addHours(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.end = currentDateTime.date.addDays(roundUpCount);\r\n result.start = result.end?.addDays(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.end = currentDateTime.addDays(-1 * diff).date.addDays(7 * roundUpCount);\r\n result.start = result.end.addDays(-count * 7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)?.addMonths(roundUpCount) ?? null;\r\n result.start = result.end?.addMonths(-count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.end = RockDateTime.fromParts(currentDateTime.year, 1, 1)?.addYears(roundUpCount) ?? null;\r\n result.start = result.end?.addYears(-count) ?? null;\r\n }\r\n\r\n // don't let Last,Previous have any future dates\r\n const cutoffDate = currentDateTime.date.addDays(1);\r\n if (result.end && result.end.date > cutoffDate) {\r\n result.end = cutoffDate;\r\n }\r\n }\r\n else if (value.rangeType === RangeType.Next || value.rangeType === RangeType.Upcoming) {\r\n // The number of time units to adjust by.\r\n const count = value.timeValue ?? 1;\r\n\r\n // If we are getting \"Upcoming\" then round up to include the\r\n // current day/week/month/year.\r\n const roundUpCount = value.rangeType === RangeType.Upcoming ? 1 : 0;\r\n\r\n if (value.timeUnit === TimeUnit.Hour) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, 0, 0)\r\n ?.addHours(roundUpCount) ?? null;\r\n result.end = result.start?.addHours(count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Day) {\r\n result.start = currentDateTime.date.addDays(roundUpCount);\r\n result.end = result.start.addDays(count);\r\n }\r\n else if (value.timeUnit === TimeUnit.Week) {\r\n // TODO: This needs to be updated to get the FirstDayOfWeek from server.\r\n let diff = currentDateTime.dayOfWeek - DayOfWeek.Monday;\r\n\r\n if (diff < 0) {\r\n diff += 7;\r\n }\r\n\r\n result.start = currentDateTime.addDays(-1 * diff)\r\n .date.addDays(7 * roundUpCount);\r\n result.end = result.start.addDays(count * 7);\r\n }\r\n else if (value.timeUnit === TimeUnit.Month) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, currentDateTime.month, 1)\r\n ?.addMonths(roundUpCount) ?? null;\r\n result.end = result.start?.addMonths(count) ?? null;\r\n }\r\n else if (value.timeUnit === TimeUnit.Year) {\r\n result.start = RockDateTime.fromParts(currentDateTime.year, 1, 1)\r\n ?.addYears(roundUpCount) ?? null;\r\n result.end = result.start?.addYears(count) ?? null;\r\n }\r\n\r\n // don't let Next,Upcoming have any past dates\r\n if (result.start && result.start.date < currentDateTime.date) {\r\n result.start = currentDateTime.date;\r\n }\r\n }\r\n else if (value.rangeType === RangeType.DateRange) {\r\n result.start = RockDateTime.parseISO(value.lowerDate ?? \"\");\r\n result.end = RockDateTime.parseISO(value.upperDate ?? \"\");\r\n\r\n // Sliding date range does not use ISO dates (though might be changed\r\n // in the future). So if we can't parse as an ISO date then try a\r\n // natural parse.\r\n if (!result.start && value.lowerDate) {\r\n result.start = RockDateTime.fromJSDate(new Date(value.lowerDate));\r\n }\r\n\r\n if (!result.end && value.upperDate) {\r\n result.end = RockDateTime.fromJSDate(new Date(value.upperDate));\r\n }\r\n\r\n if (result.end) {\r\n // Add a day to the end so that we get the entire day when comparing.\r\n result.end = result.end.addDays(1);\r\n }\r\n }\r\n\r\n // To avoid confusion about the day or hour of the end of the date range,\r\n // subtract a millisecond off our 'less than' end date. For example, if our\r\n // end date is 2019-11-7, we actually want all the data less than 2019-11-8,\r\n // but if a developer does EndDate.DayOfWeek, they would want 2019-11-7 and\r\n // not 2019-11-8 So, to make sure we include all the data for 2019-11-7, but\r\n // avoid the confusion about what DayOfWeek of the end, we'll compromise by\r\n // subtracting a millisecond from the end date\r\n if (result.end && value.timeUnit != TimeUnit.Hour) {\r\n result.end = result.end.addMilliseconds(-1);\r\n }\r\n\r\n return result;\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\n\r\n// NOTE: Do not make this public yet. This is essentially temporary and\r\n// will likely move to a different place and be merged with the popover\r\n// concept code as well.\r\ntype TooltipOptions = {\r\n /** Allow HTML content in the tooltip. */\r\n html?: boolean;\r\n\r\n /** Enables santization of HTML content. */\r\n sanitize?: boolean;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare const $: any;\r\n\r\n/**\r\n * Configure a tooltip for the specified node or nodes to show on hover. This\r\n * currently uses Bootstrap tooltips but may be changed to use a different\r\n * method later.\r\n * \r\n * @param node The node or nodes to have tooltips configured on.\r\n * @param options The options that describe how the tooltips should behave.\r\n */\r\nexport function tooltip(node: Element | Element[], options?: TooltipOptions): void {\r\n // If we got an array of elements then activate each one.\r\n if (Array.isArray(node)) {\r\n for (const n of node) {\r\n tooltip(n, options);\r\n }\r\n\r\n return;\r\n }\r\n\r\n $(node).tooltip({\r\n html: options?.html,\r\n sanitize: options?.sanitize ?? true\r\n });\r\n}\r\n","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Guid } from \"@Obsidian/Types\";\r\nimport { emptyGuid } from \"./guid\";\r\nimport { post } from \"./http\";\r\nimport { TreeItemBag } from \"@Obsidian/ViewModels/Utility/treeItemBag\";\r\nimport { CategoryPickerChildTreeItemsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/categoryPickerChildTreeItemsOptionsBag\";\r\nimport { LocationItemPickerGetActiveChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/locationItemPickerGetActiveChildrenOptionsBag\";\r\nimport { DataViewPickerGetDataViewsOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/dataViewPickerGetDataViewsOptionsBag\";\r\nimport { WorkflowTypePickerGetWorkflowTypesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowTypePickerGetWorkflowTypesOptionsBag\";\r\nimport { PagePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetChildrenOptionsBag\";\r\nimport { PagePickerGetSelectedPageHierarchyOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/pagePickerGetSelectedPageHierarchyOptionsBag\";\r\nimport { ConnectionRequestPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/connectionRequestPickerGetChildrenOptionsBag\";\r\nimport { GroupPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/groupPickerGetChildrenOptionsBag\";\r\nimport { MergeTemplatePickerGetMergeTemplatesOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeTemplatePickerGetMergeTemplatesOptionsBag\";\r\nimport { MergeTemplateOwnership } from \"@Obsidian/Enums/Controls/mergeTemplateOwnership\";\r\nimport { MetricCategoryPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricCategoryPickerGetChildrenOptionsBag\";\r\nimport { MetricItemPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/metricItemPickerGetChildrenOptionsBag\";\r\nimport { RegistrationTemplatePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/registrationTemplatePickerGetChildrenOptionsBag\";\r\nimport { ReportPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/reportPickerGetChildrenOptionsBag\";\r\nimport { SchedulePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/schedulePickerGetChildrenOptionsBag\";\r\nimport { WorkflowActionTypePickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/workflowActionTypePickerGetChildrenOptionsBag\";\r\nimport { MergeFieldPickerGetChildrenOptionsBag } from \"@Obsidian/ViewModels/Rest/Controls/mergeFieldPickerGetChildrenOptionsBag\";\r\nimport { flatten } from \"./arrayUtils\";\r\nimport { toNumberOrNull } from \"./numberUtils\";\r\n\r\n/**\r\n * The methods that must be implemented by tree item providers. These methods\r\n * provide the TreeItem objects to be displayed when lazy loading is being used.\r\n */\r\nexport interface ITreeItemProvider {\r\n /**\r\n * Get the root items to be displayed in the tree list.\r\n *\r\n * @returns A collection of TreeItem objects, optionally wrapped in a Promise\r\n * if the loading is being performed asynchronously.\r\n */\r\n getRootItems(): Promise | TreeItemBag[];\r\n\r\n /**\r\n * Get the child items of the given tree item.\r\n *\r\n * @param item The parent item whose children should be loaded.\r\n *\r\n * @returns A collection of TreeItem objects, optionally wrapped in a Promise\r\n * if the loading is being performed asynchronously.\r\n */\r\n getChildItems(item: TreeItemBag): Promise | TreeItemBag[];\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving categories from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class CategoryTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The root category to start pulling categories from. Set to undefined to\r\n * begin with any category that does not have a parent.\r\n */\r\n public rootCategoryGuid?: Guid;\r\n\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public entityTypeGuid?: Guid;\r\n\r\n /**\r\n * The value that must match in the category EntityTypeQualifierColumn\r\n * property. Set to undefined or an empty string to ignore.\r\n */\r\n public entityTypeQualifierColumn?: string;\r\n\r\n /**\r\n * The value that must match in the category EntityTypeQualifierValue\r\n * property.\r\n */\r\n public entityTypeQualifierValue?: string;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: Partial = {\r\n parentGuid: parentGuid,\r\n entityTypeGuid: this.entityTypeGuid,\r\n entityTypeQualifierColumn: this.entityTypeQualifierColumn,\r\n entityTypeQualifierValue: this.entityTypeQualifierValue,\r\n lazyLoad: false,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/CategoryPickerChildTreeItems\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(this.rootCategoryGuid);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving locations from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class LocationTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: Partial = {\r\n guid: parentGuid ?? emptyGuid,\r\n rootLocationGuid: emptyGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/LocationItemPickerGetActiveChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving data views from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class DataViewTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public entityTypeGuid?: Guid;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n getCategorizedItems: true,\r\n includeCategoriesWithoutChildren: false,\r\n entityTypeGuidFilter: this.entityTypeGuid,\r\n lazyLoad: false,\r\n securityGrantToken: this.securityGrantToken,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/DataViewPickerGetDataViews\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving categories from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class WorkflowTypeTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The entity type unique identifier to restrict results to. Set to undefined\r\n * to include all categories, regardless of entity type.\r\n */\r\n public includeInactiveItems?: boolean;\r\n\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n includeInactiveItems: this.includeInactiveItems ?? false,\r\n securityGrantToken: this.securityGrantToken,\r\n };\r\n\r\n const response = await post(\"/api/v2/Controls/WorkflowTypePickerGetWorkflowTypes\", {}, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving pages from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class PageTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * List of GUIDs or pages to exclude from the list.\r\n */\r\n public hidePageGuids?: Guid[] | null;\r\n\r\n /**\r\n * Currently selected page\r\n */\r\n public selectedPageGuids?: Guid[] | null;\r\n\r\n /**\r\n * Gets the child items of the given parent (or root if no parent given) from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n let result: TreeItemBag[];\r\n\r\n const options: Partial = {\r\n guid: parentGuid ?? emptyGuid,\r\n rootPageGuid: null,\r\n hidePageGuids: this.hidePageGuids ?? [],\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/PagePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n result = response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n\r\n // If we're getting child nodes or if there is no selected page\r\n if (parentGuid || !this.selectedPageGuids) {\r\n return result;\r\n }\r\n\r\n // If we're getting the root elements and we have a selected page, we also want to grab\r\n // all the parent pages so we can pre-load the entire hierarchy to the selected page\r\n return this.getHierarchyToSelectedPage(result);\r\n }\r\n\r\n /**\r\n * Get the hierarchical list of parent pages of the selectedPageGuid\r\n *\r\n * @returns A list of GUIDs of the parent pages\r\n */\r\n private async getParentList(): Promise {\r\n const options: PagePickerGetSelectedPageHierarchyOptionsBag = {\r\n selectedPageGuids: this.selectedPageGuids,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/PagePickerGetSelectedPageHierarchy\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Fill in pages to the depth of the selected page\r\n *\r\n * @param rootLayer The bottom layer of pages that we'll build depth upon\r\n *\r\n * @return The augmented `rootLayer` with the child pages\r\n */\r\n private async getHierarchyToSelectedPage(rootLayer: TreeItemBag[]): Promise {\r\n const parents = await this.getParentList();\r\n\r\n if (!parents || parents.length == 0) {\r\n // Selected page has no parents, so we're done.\r\n return rootLayer;\r\n }\r\n\r\n const childLists = await Promise.all(parents.map(guid => this.getItems(guid)));\r\n const allPages = rootLayer.concat(flatten(childLists));\r\n\r\n parents.forEach((parentGuid, i) => {\r\n const parentPage: TreeItemBag | undefined = allPages.find(page => page.value == parentGuid);\r\n if (parentPage) {\r\n parentPage.children = childLists[i];\r\n }\r\n });\r\n\r\n return rootLayer;\r\n }\r\n\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving connection requests from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ConnectionRequestTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid?: Guid | null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/ConnectionRequestPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving groups from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class GroupTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** GUID of the group you want to use as the root. */\r\n public rootGroupGuid: Guid | null = null;\r\n\r\n /** List of group types GUIDs to limit to groups of those types. */\r\n public includedGroupTypeGuids: Guid[] = [];\r\n\r\n /** Whether to include inactive groups or not. */\r\n public includeInactiveGroups: boolean = false;\r\n\r\n /** Whether to limit to only groups that have scheduling enabled. */\r\n public limitToSchedulingEnabled: boolean = false;\r\n\r\n /** Whether to limit to only groups that have RSVPs enabled. */\r\n public limitToRSVPEnabled: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n guid: parentGuid,\r\n rootGroupGuid: this.rootGroupGuid,\r\n includedGroupTypeGuids: this.includedGroupTypeGuids,\r\n includeInactiveGroups: this.includeInactiveGroups,\r\n limitToSchedulingEnabled: this.limitToSchedulingEnabled,\r\n limitToRSVPEnabled: this.limitToRSVPEnabled,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/GroupPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MergeTemplateTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Filter for which merge templates to include in results: Global, Public, or Both */\r\n public mergeTemplateOwnership: MergeTemplateOwnership = MergeTemplateOwnership.Global;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n mergeTemplateOwnership: this.mergeTemplateOwnership,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MergeTemplatePickerGetMergeTemplates\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MetricCategoryTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MetricCategoryPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MetricItemTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** A list of category GUIDs to filter the results */\r\n public includeCategoryGuids: Guid[] | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n includeCategoryGuids: this.includeCategoryGuids,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/MetricItemPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving registration templates from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class RegistrationTemplateTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/RegistrationTemplatePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ReportTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** A list of category GUIDs to filter the results. */\r\n public includeCategoryGuids: Guid[] | null = null;\r\n\r\n /** Guid of an Entity Type to filter results by the reports that relate to this entity type. */\r\n public entityTypeGuid: Guid | null = null;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n includeCategoryGuids: this.includeCategoryGuids,\r\n entityTypeGuid: this.entityTypeGuid,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/ReportPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class ScheduleTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Whether to include inactive schedules in the results. */\r\n public includeInactive: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentGuid: Guid | null = null): Promise {\r\n const options: Partial = {\r\n parentGuid,\r\n includeInactiveItems: this.includeInactive,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/SchedulePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Tree Item Provider for retrieving reports from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class WorkflowActionTypeTreeItemProvider implements ITreeItemProvider {\r\n /** The security grant token that will be used to request additional access to the group list. */\r\n public securityGrantToken: string | null = null;\r\n\r\n /** Whether to include inactive schedules in the results. */\r\n public includeInactive: boolean = false;\r\n\r\n /**\r\n * Gets the child items from the server.\r\n *\r\n * @param parentGuid The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentId: string | null = null): Promise {\r\n const options: Partial = {\r\n parentId: toNumberOrNull(parentId) ?? 0,\r\n securityGrantToken: this.securityGrantToken\r\n };\r\n const url = \"/api/v2/Controls/WorkflowActionTypePickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n return response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems(null);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}\r\n\r\n/**\r\n * Tree Item Provider for retrieving merge fields from the server and displaying\r\n * them inside a tree list.\r\n */\r\nexport class MergeFieldTreeItemProvider implements ITreeItemProvider {\r\n /**\r\n * The security grant token that will be used to request additional access\r\n * to the category list.\r\n */\r\n public securityGrantToken?: string | null;\r\n\r\n /**\r\n * Currently selected page\r\n */\r\n public selectedIds?: string[] | string | null;\r\n\r\n /**\r\n * Root Level Merge Fields\r\n */\r\n public additionalFields: string = \"\";\r\n\r\n /**\r\n * Gets the child items of the given parent (or root if no parent given) from the server.\r\n *\r\n * @param parentId The parent item whose children are retrieved.\r\n *\r\n * @returns A collection of TreeItem objects as an asynchronous operation.\r\n */\r\n private async getItems(parentId?: string | null): Promise {\r\n let result: TreeItemBag[];\r\n\r\n const options: Partial = {\r\n id: parentId || \"0\",\r\n additionalFields: this.additionalFields\r\n };\r\n const url = \"/api/v2/Controls/MergeFieldPickerGetChildren\";\r\n const response = await post(url, undefined, options);\r\n\r\n if (response.isSuccess && response.data) {\r\n result = response.data;\r\n }\r\n else {\r\n console.log(\"Error\", response.errorMessage);\r\n return [];\r\n }\r\n\r\n // If we're getting child nodes or if there is no selected page\r\n if (parentId || !this.selectedIds || this.selectedIds.length == 0) {\r\n return result;\r\n }\r\n\r\n // If we're getting the root elements and we have a selected page, we also want to grab\r\n // all the parent pages so we can pre-load the entire hierarchy to the selected page\r\n return this.getHierarchyToSelectedMergeField(result);\r\n }\r\n\r\n /**\r\n * Fill in pages to the depth of the selected page\r\n *\r\n * @param rootLayer The bottom layer of pages that we'll build depth upon\r\n *\r\n * @return The augmented `rootLayer` with the child pages\r\n */\r\n private async getHierarchyToSelectedMergeField(rootLayer: TreeItemBag[]): Promise {\r\n const parents = this.getParentList();\r\n\r\n if (!parents || parents.length == 0) {\r\n // Selected page has no parents, so we're done.\r\n return rootLayer;\r\n }\r\n\r\n const childLists = await Promise.all(parents.map(id => this.getItems(id)));\r\n const allMergeFields = rootLayer.concat(flatten(childLists));\r\n\r\n parents.forEach((parentGuid, i) => {\r\n const parentMergeField: TreeItemBag | undefined = allMergeFields.find(page => page.value == parentGuid);\r\n if (parentMergeField) {\r\n parentMergeField.children = childLists[i];\r\n }\r\n });\r\n\r\n return rootLayer;\r\n }\r\n\r\n /**\r\n * Get the hierarchical list of parent merge fields of the selected merge fields\r\n *\r\n * @returns A list of IDs of the parent merge fields\r\n */\r\n private getParentList(): string[] | null {\r\n if (!this.selectedIds || this.selectedIds.length == 0) {\r\n return null;\r\n }\r\n\r\n // If it's a single selection, grab the parents by splitting on \"|\",\r\n // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\r\n if (typeof this.selectedIds == \"string\") {\r\n return this.splitSelectionIntoParents(this.selectedIds);\r\n }\r\n\r\n // Not null/empty nor a single selection, so must be an array of selections\r\n return flatten(this.selectedIds.map(sel => this.splitSelectionIntoParents(sel)));\r\n }\r\n\r\n /**\r\n * Split the given selected ID up and get a list of the parent IDs\r\n *\r\n * @param selection a string denoted one of the selected values\r\n */\r\n private splitSelectionIntoParents(selection: string): string[] {\r\n const parentIds: string[] = [];\r\n\r\n // grab the parents by splitting on \"|\",\r\n // e.g. \"Grand|Parent|Child\" will give [\"Grand\", \"Parent\"] as the parents\r\n const splitList = selection.split(\"|\");\r\n splitList.pop();\r\n\r\n // Now we need to make sure each item further in the list contains it's parents' names\r\n // e.g. [\"Grand\", \"Parent\"] => [\"Grand\", \"Grand|Parent\"]\r\n while (splitList.length >= 1) {\r\n parentIds.unshift(splitList.join(\"|\"));\r\n splitList.pop();\r\n }\r\n\r\n return parentIds;\r\n }\r\n\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getRootItems(): Promise {\r\n return await this.getItems();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n async getChildItems(item: TreeItemBag): Promise {\r\n return this.getItems(item.value);\r\n }\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n//\r\n\r\nimport { Ref, watch } from \"vue\";\r\n\r\n/**\r\n * Is the value a valid URL?\r\n * @param val\r\n */\r\nexport function isUrl(val: unknown): boolean {\r\n if (typeof val === \"string\") {\r\n // https://www.regextester.com/1965\r\n // Modified from link above to support urls like \"http://localhost:6229/Person/1/Edit\" (Url does not have a period)\r\n const re = /^(http[s]?:\\/\\/)?[^\\s([\"<,>]*\\.?[^\\s[\",><]*$/;\r\n return re.test(val);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Make the URL safe to use for redirects. Basically, this strips off any\r\n * protocol and hostname from the URL and ensures it's not a javascript:\r\n * url or anything like that.\r\n *\r\n * @param url The URL to be made safe to use with a redirect.\r\n *\r\n * @returns A string that is safe to assign to window.location.href.\r\n */\r\nexport function makeUrlRedirectSafe(url: string): string {\r\n try {\r\n // If this can't be parsed as a url, such as \"/page/123\" it will throw\r\n // an error which will be handled by the next section.\r\n const u = new URL(url);\r\n\r\n // If the protocol isn't an HTTP or HTTPS, then it is most likely\r\n // a dangerous URL.\r\n if (u.protocol !== \"http:\" && u.protocol !== \"https:\") {\r\n return \"/\";\r\n }\r\n\r\n // Try again incase they did something like \"http:javascript:alert('hi')\".\r\n return makeUrlRedirectSafe(`${u.pathname}${u.search}`);\r\n }\r\n catch {\r\n // If the URL contains a : but could not be parsed as a URL then it\r\n // is not valid, so return \"/\" so they get redirected to home page.\r\n if (url.indexOf(\":\") !== -1) {\r\n return \"/\";\r\n }\r\n\r\n // Otherwise consider it safe to use.\r\n return url;\r\n }\r\n}\r\n\r\n/**\r\n * Keep a list of named Refs synchronized with URL query parameters in the address of the same names.\r\n * If there are already query parameters in the URL with those names, the Refs will be assigned those\r\n * values. This will also watch those Refs for changes and update the query parameters to reflect\r\n * those changes.\r\n *\r\n * @param refs An object where the keys represent the query parameters keys to keep synchronized with\r\n * and the values are the Refs those query parameters are synched with.\r\n */\r\nexport function syncRefsWithQueryParams(refs: Record): void {\r\n // Get current query parameters\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n Object.entries(refs).forEach(([key, ref]: [string, Ref]) => {\r\n let param = null;\r\n\r\n // try to get the decoded parameter value\r\n try {\r\n param = JSON.parse(decodeURI(params.get(key) ?? \"\"));\r\n }\r\n catch (e) { /* just leave the param as null */ }\r\n\r\n // If we found a value, set the Ref to it\r\n if (param != null) {\r\n ref.value = param;\r\n }\r\n\r\n // keep URL params up-to-date with changes to this Ref\r\n watch(ref, updater(key));\r\n });\r\n\r\n //\r\n function updater(key) {\r\n return (value) => {\r\n params.set(key, encodeURI(JSON.stringify(value)));\r\n\r\n history.replaceState(null, \"\", \"?\" + params.toString());\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Removes query parameters from the current URL and replaces the state in history.\r\n *\r\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\r\n */\r\nexport function removeCurrentUrlQueryParams(...queryParamKeys: string[]): void {\r\n removeUrlQueryParams(window.location.href, ...queryParamKeys);\r\n}\r\n\r\n/**\r\n * Removes query parameters from the current URL and replaces the state in history.\r\n *\r\n * @param url The URL from which to remove the query parameters.\r\n * @param queryParamKeys The string array of query parameter keys to remove from the current URL.\r\n */\r\nexport function removeUrlQueryParams(url: string | URL, ...queryParamKeys: string[]): void {\r\n if (!queryParamKeys || !queryParamKeys.length) {\r\n return;\r\n }\r\n\r\n if (typeof url === \"string\") {\r\n url = new URL(url);\r\n }\r\n\r\n const queryParams = url.searchParams;\r\n\r\n queryParamKeys.forEach((queryParamKey: string) => queryParams.delete(queryParamKey));\r\n\r\n window.history.replaceState(null, \"\", url);\r\n}","// \r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// \r\n\r\nimport type { RulesPropType, ValidationResult, ValidationRule, ValidationRuleFunction, ValidationRuleReference } from \"@Obsidian/Types/validationRules\";\r\nimport type { PropType } from \"vue\";\r\n\r\n/** The currently defined rules by name. */\r\nconst definedRules: Record = {};\r\n\r\n/** Defines the property type for a component's rules. */\r\nexport const rulesPropType: RulesPropType = {\r\n type: [Array, Object, String] as PropType,\r\n default: \"\"\r\n};\r\n\r\n/**\r\n * Parse a string into a valid rule reference. Basically this does the heavy\r\n * lifting to take a string and spit out the rule name and parameters. This\r\n * assumes the rule has already been normalized and does not contain multiple\r\n * rules separated by a | character.\r\n *\r\n * @param rule The rule to be parsed.\r\n *\r\n * @returns The rule reference that contains the name and parameters.\r\n */\r\nexport function parseRule(rule: string): ValidationRuleReference {\r\n let name = \"\";\r\n let params: unknown[] = [];\r\n\r\n const colonIndex = rule.indexOf(\":\");\r\n if (colonIndex === -1) {\r\n name = rule;\r\n }\r\n else {\r\n name = rule.substring(0, colonIndex);\r\n params = rule.substring(colonIndex + 1).split(\",\");\r\n }\r\n\r\n return {\r\n name,\r\n params\r\n };\r\n}\r\n\r\n/**\r\n * Normalize a single rule or array of rules into a flat array of rules. This\r\n * handles strings that contain multiple rules and splits them out into individual\r\n * rule strings.\r\n *\r\n * @param rules The rules to be normalized.\r\n *\r\n * @returns A flattened array that contains all the individual rules.\r\n */\r\nexport function normalizeRules(rules: ValidationRule | ValidationRule[]): ValidationRule[] {\r\n if (typeof rules === \"string\") {\r\n if (rules.indexOf(\"|\") !== -1) {\r\n return rules.split(\"|\").filter(r => r !== \"\");\r\n }\r\n else if (rules !== \"\") {\r\n return [rules];\r\n }\r\n }\r\n else if (Array.isArray(rules)) {\r\n // Normalize the rule, since it may contain a string like \"required|notzero\"\r\n // which needs to be further normalized.\r\n const normalizedRules: ValidationRule[] = [];\r\n\r\n for (const r of rules) {\r\n normalizedRules.push(...normalizeRules(r));\r\n }\r\n\r\n return normalizedRules;\r\n }\r\n else if (typeof rules === \"function\") {\r\n return [rules];\r\n }\r\n else if (typeof rules === \"object\") {\r\n return [rules];\r\n }\r\n\r\n return [];\r\n}\r\n\r\n/**\r\n * Checks if any of the specified rules indicates a rule that requires the value\r\n * to be filled in.\r\n *\r\n * @param rules The rules to be checked.\r\n *\r\n * @returns True if any of the rules is considered a required rule; otherwise false.\r\n */\r\nexport function containsRequiredRule(rules: ValidationRule | ValidationRule[]): boolean {\r\n return normalizeRules(rules).some(r => r === \"required\");\r\n}\r\n\r\n/**\r\n * Normalizes rules to callable functions. This is used to translate string\r\n * and reference rules to their final function that will be called.\r\n *\r\n * @param rules The ruels to be normalized to functions.\r\n *\r\n * @returns An array of rule functions that will perform validation checks.\r\n */\r\nfunction normalizeRulesToFunctions(rules: ValidationRule[]): ValidationRuleFunction[] {\r\n const ruleFunctions: ValidationRuleFunction[] = [];\r\n\r\n for (const rule of rules) {\r\n if (typeof rule === \"string\") {\r\n const ruleRef = parseRule(rule);\r\n const fn = definedRules[ruleRef.name];\r\n\r\n if (fn) {\r\n ruleFunctions.push((value) => fn(value, ruleRef.params));\r\n }\r\n else {\r\n console.warn(`Attempt to validate with unknown rule ${rule}.`);\r\n }\r\n }\r\n else if (typeof rule === \"function\") {\r\n ruleFunctions.push(rule);\r\n }\r\n else if (typeof rule === \"object\") {\r\n const fn = definedRules[rule.name];\r\n\r\n if (fn) {\r\n ruleFunctions.push((value) => fn(value, rule.params));\r\n }\r\n else {\r\n console.warn(`Attempt to validate with unknown rule ${rule.name}.`);\r\n }\r\n }\r\n }\r\n\r\n return ruleFunctions;\r\n}\r\n\r\n/**\r\n * Normalize a validation result into a useful text message that can be\r\n * displayed to the user.\r\n *\r\n * @param result The validation error message or a blank string if validation passed.\r\n */\r\nfunction normalizeRuleResult(result: ValidationResult): string {\r\n if (typeof result === \"string\") {\r\n return result;\r\n }\r\n else if (result === true) {\r\n return \"\";\r\n }\r\n else {\r\n return \"failed validation\";\r\n }\r\n}\r\n\r\n/**\r\n * Runs validation on the value for all the rules provided.\r\n *\r\n * @param value The value to be checked.\r\n * @param rule The array of rules that will be used during validation.\r\n *\r\n * @returns An array of error messages, or empty if value passed.\r\n */\r\nexport function validateValue(value: unknown, rule: ValidationRule | ValidationRule[]): string[] {\r\n const fns = normalizeRulesToFunctions(normalizeRules(rule));\r\n\r\n const results: string[] = [];\r\n\r\n for (const fn of fns) {\r\n const result = normalizeRuleResult(fn(value));\r\n\r\n if (result !== \"\") {\r\n results.push(result);\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\n/**\r\n * Define a new rule by name and provide the validation function.\r\n *\r\n * @param ruleName The name of the rule to be registered.\r\n * @param validator The validation function.\r\n */\r\nexport function defineRule(ruleName: string, validator: ValidationRuleFunction): void {\r\n if (definedRules[ruleName] !== undefined) {\r\n console.warn(`Attempt to redefine validation rule ${ruleName}.`);\r\n }\r\n else {\r\n definedRules[ruleName] = validator;\r\n }\r\n}\r\n"],"names":["doApiCallRaw","_x","_x2","_x3","_x4","_doApiCallRaw","apply","arguments","_asyncToGenerator","method","url","params","data","axios","doApiCall","_x5","_x6","_doApiCall","length","undefined","result","isError","isSuccess","statusCode","status","errorMessage","e","isAxiosError","_e$response","_e$response$data","_e$response2","_e$response2$data","_e$response$status","_e$response4","response","Message","message","_e$response$data$Mess","_e$response3","_e$response3$data","get","_x7","_get","post","_x8","_post","httpFunctionsSymbol","Symbol","provideHttp","functions","provide","useHttp","inject","uploadFile","_x9","_x10","_x11","_uploadFile","progress","headers","onUploadProgress","event","loaded","total","Math","floor","uploadContentFile","_x12","_x13","_x14","_x15","_uploadContentFile","file","encryptedRootFolder","folderPath","options","_options$baseUrl","concat","baseUrl","formData","FormData","append","value","text","FileName","uploadBinaryFile","_x16","_x17","_x18","_uploadBinaryFile","binaryFileTypeGuid","_options$baseUrl2","isTemporary","Guid","getDefaultAddressControlModel","state","country","validateAddress","address","flatten","arr","depth","forEach","flatDeep","call","val","Array","isArray","push","moreThanOneElement","noElementsFound","valueComparer","keySelector","descending","a","b","valueA","valueB","List","constructor","elements","fromArrayNoCopy","list","any","predicate","filter","first","firstOrUndefined","single","singleOrUndefined","orderBy","comparer","OrderedList","orderByDescending","where","toArray","baseComparer","sort","thenBy","thenByDescending","emptyGuid","newGuid","replace","c","r","random","v","toString","normalize","toLowerCase","isValidGuid","guid","test","toGuidOrNull","areEqual","isEmpty","isWhiteSpace","trim","isNullOrWhiteSpace","splitCamelCase","asCommaAnd","strs","last","pop","join","toTitleCase","str","word","charAt","toUpperCase","substring","upperCaseFirstCharacter","pluralConditional","num","singular","plural","padLeft","padCharacter","padRight","truncate","limit","trimmable","reg","RegExp","words","split","count","ellipsis","visibleWords","escapeHtmlRegExp","escapeHtmlMap","escapeHtml","ch","defaultControlCompareValue","itemValue","guidValue","guidItemValue","blankIfZero","parseInt","get12HourValue","hour","englishDayNames","englishMonthNames","dateFormatters","date","year","month","substr","dayOfWeek","day","millisecond","minute","second","offset","offsetHour","abs","offsetMinute",":","/","dateFormatterKeys","Object","keys","k","standardDateFormats","formatAspDate","universalDateTime","formatAspCustomDate","format","i","matchFound","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","f","formatAspStandardDate","DateTimeFormat","DateFull","DateMedium","DateShort","TimeShort","TimeWithSeconds","DateTimeShort","DateTimeShortWithSeconds","DateTimeMedium","DateTimeMediumWithSeconds","DateTimeFull","DateTimeFullWithSeconds","RockDateTime","dateTime","fromParts","zone","luxonZone","FixedOffsetZone","instance","DateTime","fromObject","isValid","fromMilliseconds","milliseconds","fromMillis","fromJSDate","parseISO","dateString","fromISO","setZone","parseHTTP","fromHTTP","now","utcNow","toUTC","weekday","DayOfWeek","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","dayOfYear","localDateTime","toLocal","organizationDateTime","addDays","days","plus","addHours","hours","addMilliseconds","addMinutes","minutes","addMonths","months","addSeconds","seconds","addYears","years","toMilliseconds","toMillis","toOffset","toASPString","toISOString","toISO","toLocaleString","toElapsedString","msPerHour","hoursPerDay","daysPerMonth","daysPerYear","totalMs","totalHours","totalDays","totalMonths","round","totalYears","toHTTPString","toHTTP","valueOf","isEqualTo","otherDateTime","isLaterThan","isEarlierThan","blockReloadSymbol","configurationValuesChangedSymbol","useConfigurationValues","useInvokeBlockAction","provideReloadBlock","callback","useReloadBlock","provideConfigurationValuesChanged","callbacks","invoke","_i","_callbacks","reset","splice","onConfigurationValuesChanged","setCustomSettingsBoxValue","box","propertyName","settings","validProperties","includes","setPropertiesBoxValue","bag","dispatchBlockEvent","eventName","blockGuid","eventData","ev","CustomEvent","cancelable","detail","document","dispatchEvent","isBlockEvent","securityGrantSymbol","getSecurityGrant","token","tokenRef","ref","invokeBlockAction","renewalTimeout","renewToken","_ref","scheduleRenewal","_tokenRef$value","clearTimeout","segments","expiresDateTime","renewTimeout","setTimeout","updateToken","newToken","provideSecurityGrant","grant","useSecurityGrantToken","watchPropertyChanges","propertyRefs","emit","_loop","propRef","watch","context","refreshDetailAttributes","_refreshDetailAttributes","entity","isEditable","_result$data$entity","_result$data$entity2","newBag","_objectSpread","attributes","attributeValues","blockGuidSymbol","provideBlockGuid","useBlockGuid","asBooleanOrNull","asString","indexOf","asBoolean","asYesNoOrNull","boolOrNull","asTrueFalseOrNull","bus","mitt","log","writeLog","msg","publish","payload","subscribe","on","set","key","expirationDT","expiration","cache","cacheJson","JSON","stringify","sessionStorage","setItem","getItem","parse","promiseCache","cachePromiseFactory","fn","_promiseCache$key","cachedResult","then","catch","deepEqual","strict","isNaN","aEntries","entries","bEntries","aEntry","bEntry","debounce","delay","eager","timeout","suspenseSymbol","BasicSuspenseProvider","parentProvider","operationKey","pendingOperations","finishedHandlers","allOperationsComplete","nextTick","handler","completeAsyncOperation","addOperation","operation","startAsyncOperation","index","hasPendingOperations","addFinishedHandler","provideSuspense","provider","useSuspense","useVModelPassthrough","props","modelName","internalValue","updateRefValue","useVModelPassthroughWithPropUpdateCheck","listeners","onPropUpdate","addPropUpdateListener","target","defineAsyncComponent","source","vueDefineAsyncComponent","suspense","component","standardRockFormFieldProps","label","type","String","default","help","rules","formGroupClasses","validationTitle","isRequiredIndicatorHidden","Boolean","copyStandardRockFormFieldProps","destination","useStandardRockFormFieldProps","propValues","reactive","standardAsyncPickerProps","enhanceForLongLists","lazyMode","ControlLazyMode","OnDemand","multiple","showBlankItem","blankValue","displayStyle","PickerDisplayStyle","Auto","columnCount","Number","copyStandardAsyncPickerProps","useStandardAsyncPickerProps","standardFieldProps","deep","extendedRef","refValue","propertyRef","asFormattedString","digits","minimumFractionDigits","maximumFractionDigits","toNumber","toNumberOrNull","replaced","toCurrencyOrNull","toOrdinalSuffix","j","toOrdinal","toWord","zeroPad","toDecimalPlaces","decimalPlaces","pow","dateKeyLength","dateKeyNoYearLength","getYear","dateKey","defaultValue","getMonth","getDay","toDateKey","yearStr","monthStr","dayStr","toNoYearDateKey","smoothScrollToTop","window","scrollTo","top","behavior","currentModalCount","trackModalState","body","cssClasses","cssClass","classList","add","_iterator2","_step2","remove","loadJavaScriptAsync","_loadJavaScriptAsync","isScriptLoaded","fingerprint","src","Obsidian","scripts","from","getElementsByTagName","thisScript","promise","scriptLoadedPromise","script","createElement","setAttribute","appendChild","_scriptLoadedPromise","scriptElement","Promise","resolve","reject","addEventListener","_unused","createDialog","footer","scrollable","style","zIndex","modal","tabIndex","display","modalDialog","modalContent","modalBody","el","modalFooter","createCloseButton","closeButton","marginTop","innerHTML","createBackdrop","backdrop","showDialog","timer","container","fullscreenElement","innerText","buttons","clearDialog","dialog","_iterator3","_step3","button","btn","className","querySelector","offsetHeight","alert","_alert","confirm","_confirm","confirmDelete","typeName","additionalMessage","isEmail","re","fieldTypeTable","registerFieldType","fieldTypeGuid","fieldType","normalizedGuid","getFieldType","field","console","warn","formStateSymbol","provideFormState","useFormState","enterFullscreen","_enterFullscreen","element","exitCallback","requestFullscreen","mozRequestFullscreen","webkitRequestFullscreen","onFullscreenChange","removeEventListener","ex","error","isFullscreen","mozFullScreenElement","webkitFullscreenElement","exitFullscreen","_exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","toCoordinate","coord","isWellKnown","reverse","map","parseFloat","lat","lng","wellKnownToCoordinates","wellKnownText","coordinatesToWellKnown","coordinates","isClockwisePolygon","coordinateString","coords","nearAddressForCoordinate","coordinate","google","geocoder","maps","Geocoder","geocode","location","LatLng","results","GeocoderStatus","OK","formatted_address","nearAddressForCoordinates","polygon","sum","loadMapResources","_loadMapResources","_response$data","googleMapSettings","keyParam","googleApiKey","createLatLng","latOrLatLngOrLatLngLiteral","lngOrNoClampNoWrap","noClampNoWrap","nthNamesAbbreviated","padZeroLeft","repeat","getDateString","getTimeString","getDateTimeString","getDatesFromRangeOrPeriod","startDate","getDateFromString","dates","startsWith","getPeriodDurationInDays","endDate","getDateTimeFromString","period","endsWith","getRecurrenceDates","recurrenceDates","valueParts","valueType","valuePart","getWeekdayName","dateMatchesDays","rockDate","dateMatchesOffsetDayOfWeeks","offsets","dayOfMonth","lastDayOfMonth","getDayOfWeekFromIcalDay","getiCalDay","normalizeLineLength","lines","newLines","lineNumber","currentLine","newLine","denormalizeLineLength","LineFeeder","content","peek","RecurrenceRule","_values$UNTIL","_values$UNTIL2","rule","_defineProperty","values","_iterator4","_step4","attr","attrParts","Error","frequency","_getDateFromString","_getDateTimeFromStrin","_toNumberOrNull","_toNumberOrNull2","interval","byMonthDay","_iterator5","_step5","byDay","_iterator6","_step6","build","monthDayValues","md","dayValues","d","getDates","eventStartDateTime","startDateTime","endDateTime","dateCount","nextDate","nextDateAfter","loopCount","Event","icsContent","uid","feeder","buildLines","excludedDates","_iterator7","_step7","rDate","recurrenceRules","_iterator8","_step8","rrule","line","splitAt","keyAttributes","keySegments","_iterator9","_step9","attrSegments","_getDateTimeFromStrin2","_getDateTimeFromStrin3","dateValues","_iterator10","_step10","dateValue","isDateExcluded","rockDateOnly","_iterator11","_step11","excludedDate","_recurrenceDates","toFriendlyText","toFriendlyString","toFriendlyHtml","html","startTimeText","hour12","offsetNames","some","nameText","slice","firstDate","lastDate","listHtml","_iterator12","_step12","Calendar","_iterator13","events","_step13","formatValue","_formatValue","http","selectedValue","fromEntries","res","entry","fetchPhoneNumberConfiguration","_fetchPhoneNumberConfiguration","_result$errorMessage","getPhoneNumberConfiguration","Cache","defaultRulesConfig","formatPhoneNumber","stripPhoneNumber","_rule$match","regex","match","_rule$format","popover","node","_options$sanitize","$","sanitize","sleep","ms","isPromise","obj","PromiseCompletionSource","internalPromise","internalResolve","internalReject","reason","libraryObject","libraryPromise","getRealTimeObject","_getRealTimeObject","_window$Rock2","_window$Rock","getTopic","_getTopic","identifier","realTime","rangeTypeOptions","RangeType","Current","Previous","Last","Next","Upcoming","DateRange","timeUnitOptions","TimeUnit","Hour","Day","Week","Month","Year","getTextForValue","_matches$0$text","matches","getRangeTypeText","rangeType","_rangeTypes$0$text","rangeTypes","o","getTimeUnitText","timeUnit","_timeUnits$0$text","timeUnits","parseSlidingDateRangeString","_o$text","_o$text2","range","timeValue","lowerDate","upperDate","slidingDateRangeToString","_value$timeUnit$toStr","_value$timeUnit","_value$lowerDate","_value$upperDate","_value$timeValue","_value$timeUnit$toStr2","_value$timeUnit2","calculateSlidingDateRange","currentDateTime","start","end","_result$start$addHour","_result$start","diff","_result$start$addMont","_result$start2","_value$timeValue2","roundUpCount","_RockDateTime$fromPar","_RockDateTime$fromPar2","_result$end$addHours","_result$end","_result$end$addDays","_result$end2","_RockDateTime$fromPar3","_RockDateTime$fromPar4","_result$end$addMonths","_result$end3","_RockDateTime$fromPar5","_RockDateTime$fromPar6","_result$end$addYears","_result$end4","cutoffDate","_value$timeValue3","_RockDateTime$fromPar7","_RockDateTime$fromPar8","_result$start$addHour2","_result$start3","_RockDateTime$fromPar9","_RockDateTime$fromPar10","_result$start$addMont2","_result$start4","_RockDateTime$fromPar11","_RockDateTime$fromPar12","_result$start$addYear","_result$start5","_value$lowerDate2","_value$upperDate2","Date","tooltip","CategoryTreeItemProvider","getItems","parentGuid","_this","entityTypeGuid","entityTypeQualifierColumn","entityTypeQualifierValue","lazyLoad","securityGrantToken","getRootItems","_this2","rootCategoryGuid","getChildItems","item","_this3","LocationTreeItemProvider","_this4","rootLocationGuid","_this5","_this6","DataViewTreeItemProvider","_this7","getCategorizedItems","includeCategoriesWithoutChildren","entityTypeGuidFilter","_this8","_this9","WorkflowTypeTreeItemProvider","_this10","_this10$includeInacti","includeInactiveItems","_this11","_this12","PageTreeItemProvider","_this13","_this13$hidePageGuids","rootPageGuid","hidePageGuids","selectedPageGuids","getHierarchyToSelectedPage","getParentList","_this14","rootLayer","_this15","parents","childLists","all","allPages","parentPage","find","page","children","_this16","_this17","ConnectionRequestTreeItemProvider","_this18","_this19","_this20","GroupTreeItemProvider","_arguments","_this21","rootGroupGuid","includedGroupTypeGuids","includeInactiveGroups","limitToSchedulingEnabled","limitToRSVPEnabled","_this22","_this23","MergeTemplateTreeItemProvider","MergeTemplateOwnership","Global","_arguments2","_this24","mergeTemplateOwnership","_this25","_this26","MetricCategoryTreeItemProvider","_arguments3","_this27","_this28","_this29","MetricItemTreeItemProvider","_arguments4","_this30","includeCategoryGuids","_this31","_this32","RegistrationTemplateTreeItemProvider","_arguments5","_this33","_this34","_this35","ReportTreeItemProvider","_arguments6","_this36","_this37","_this38","ScheduleTreeItemProvider","_arguments7","_this39","includeInactive","_this40","_this41","WorkflowActionTypeTreeItemProvider","_arguments8","_this42","parentId","_this43","_this44","MergeFieldTreeItemProvider","_this45","id","additionalFields","selectedIds","getHierarchyToSelectedMergeField","_this46","allMergeFields","parentMergeField","splitSelectionIntoParents","sel","selection","parentIds","splitList","unshift","_this47","_this48","isUrl","makeUrlRedirectSafe","u","URL","protocol","pathname","search","syncRefsWithQueryParams","refs","URLSearchParams","_ref2","_slicedToArray","param","_params$get","decodeURI","updater","encodeURI","history","replaceState","removeCurrentUrlQueryParams","_len","queryParamKeys","_key","removeUrlQueryParams","href","_len2","_key2","queryParams","searchParams","queryParamKey","delete","definedRules","rulesPropType","parseRule","name","colonIndex","normalizeRules","normalizedRules","containsRequiredRule","normalizeRulesToFunctions","ruleFunctions","ruleRef","normalizeRuleResult","validateValue","fns","defineRule","ruleName","validator"],"mappings":"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"}