{"version":3,"sources":["Honeywell.ClientModel.Utilities.ts"],"names":["_this","this","currentSiteContext","SP","ClientContext","get_current","subWebContext","siteUrl","getQueryResultsCached","cacheWrapper","contextHelper","listFinder","handler","query","caml","CamlQuery","set_viewXml","context","termsList","findList","results","getItems","load","Q","Promise","resolve","reject","deferred","executeQueryAsync","sender","args","success","failure","getCachePrefix","Honeywell_ClientModel_Cache_1","sessionStorageCache","exports","getQueryResults","getRootWebListData","listName","get_site","get_rootWeb","get_lists","getByTitle","_spPageContextInfo","siteServerRelativeUrl","getCurrentWebListData","get_web","webServerRelativeUrl","getSubWebListData","itemCollectionAsArray","items","asArray","Array","get_count","i","length","get_item","MultipleUserLanguageTermsHandler","prototype","createObject","_","curryRight","reduce","result","current","value","compose","get_message","get_stackTrace","combinePromises","promises","all","then","functional","compose2","first","filter","combineObjects","curry","reduceRight","other","forEach","keys","key","GenericHandler","mapping","formatResult","item","o","field","FieldUrlValue","get_url","get_description","getTime","propertyName","map","getLookupValue","fieldValue","FieldLookupValue","get_lookupValue","call","getLookupId","get_lookupId"],"mappings":"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","file":"Honeywell.ClientModel.Utilities.js","sourcesContent":["///\r\nimport * as Q from \"q\";\r\nimport * as functional from \"Honeywell.ClientModel.Functional\"; \r\nimport {sessionStorageCache, CacheWrapper} from \"Honeywell.ClientModel.Cache\"; \r\nimport {IDeferred, IPromise} from \"Honeywell.ClientModel.Promise\";\r\n\r\n\r\n/**\r\n * Interface that defines callbacks for SharePoint success and failure\r\n */\r\nexport interface ISpQueryResultsHandler {\r\n success: (sender: any, args: SP.ClientRequestSucceededEventArgs, items: SP.ListItemCollection, deferred: IDeferred) => T,\r\n failure: (sender: any, args: SP.ClientRequestFailedEventArgs, deferred: IDeferred) => void,\r\n}\r\n\r\ntype ListFinder = {\r\n findList: (context: SP.ClientContext) => SP.List,\r\n getCachePrefix: () => string;\r\n};\r\n\r\n//The function and gives you the current client context \r\nconst currentSiteContext = () => SP.ClientContext.get_current();\r\n\r\n//The function that gives you the context of a particular subweb\r\nconst subWebContext = (siteUrl: string) => () => new SP.ClientContext(siteUrl);\r\n\r\n/**\r\n * General-purpose function to get data from SharePoint list\r\n * @param contextHellper a thunk that gives us SharePoint client context\r\n * @param listFinder \r\n * @param handler \r\n * @param query - a CAML query\r\n * @returns a Promise\r\n */\r\nconst getQueryResultsInternal = (cacheWrapper: CacheWrapper) => (contextHelper: () => SP.ClientContext) =>\r\n(listFinder: ListFinder) =>\r\n(handler: ISpQueryResultsHandler) =>\r\n(query: string) => {\r\n\r\n return cacheWrapper(() => {\r\n var caml = new SP.CamlQuery();\r\n caml.set_viewXml(query);\r\n\r\n var context: SP.ClientContext = contextHelper();\r\n var termsList = listFinder.findList(context);\r\n var results = termsList.getItems(caml);\r\n context.load(results);\r\n\r\n return Q.Promise((resolve: (val: T | IPromise) => void, reject: (reason: any) => void) => {\r\n var deferred = { resolve, reject };\r\n context.executeQueryAsync(\r\n (sender: any, args: SP.ClientRequestSucceededEventArgs) => {\r\n handler.success(sender, args, results, deferred);\r\n },\r\n (sender: any, args: SP.ClientRequestFailedEventArgs) => {\r\n handler.failure(sender, args, deferred);\r\n }\r\n );\r\n });\r\n },\r\n listFinder.getCachePrefix() + query);\r\n};\r\n\r\nconst getQueryResultsCached = getQueryResultsInternal(sessionStorageCache);\r\n\r\n\r\n/**\r\n * General-purpose function to get data from SharePoint list\r\n * @param listFinder \r\n * @param handler \r\n * @param query - a CAML query\r\n * @returns a Promise\r\n */\r\nexport const getQueryResults = getQueryResultsCached(currentSiteContext);\r\n\r\n/**\r\n * Function to get the list at the root web\r\n */\r\nexport const getRootWebListData = (listName: string) => getQueryResults({\r\n findList: (context: SP.ClientContext) => context.get_site().get_rootWeb().get_lists().getByTitle(listName),\r\n getCachePrefix: () => _spPageContextInfo.siteServerRelativeUrl + listName\r\n});\r\n\r\n/**\r\n * Function to get the list at the current web\r\n */\r\nexport const getCurrentWebListData = (listName: string) => getQueryResults({\r\n findList: (context: SP.ClientContext) => context.get_web().get_lists().getByTitle(listName),\r\n getCachePrefix: () => _spPageContextInfo.webServerRelativeUrl + listName\r\n});\r\n\r\n/**\r\n * Function to get the list at the subweb\r\n * @param siteUrl subweb URL\r\n * @param listName List Name\r\n */\r\nexport const getSubWebListData = (siteUrl: string, listName: string) => getQueryResultsCached(subWebContext(siteUrl))({\r\n findList: (context: SP.ClientContext) => context.get_web().get_lists().getByTitle(listName),\r\n getCachePrefix: () => _spPageContextInfo.webServerRelativeUrl + siteUrl + listName\r\n});\r\n\r\n/**\r\n * Turns ListItemCollection to an array\r\n * @param items \r\n * @returns array of SP.ListItem\r\n */\r\nconst itemCollectionAsArray = (items: SP.ListItemCollection) => {\r\n var asArray = new Array(items.get_count());\r\n for (var i = 0; i < asArray.length; i++) {\r\n asArray[i] = items.get_item(i);\r\n }\r\n return asArray;\r\n};\r\n\r\n// Success and failure functions to get multiple user language terms.\r\nexport class MultipleUserLanguageTermsHandler implements ISpQueryResultsHandler {\r\n success(sender: any, args: SP.ClientRequestSucceededEventArgs, items: SP.ListItemCollection, deferred: IDeferred): any {\r\n var createObject:(items:SP.ListItem[]) => any = _.curryRight(_.reduce)((result: any, current: SP.ListItem) => {\r\n result[current.get_item(\"Title\")] = current.get_item(\"Value\");\r\n return result;\r\n }, {}, this);\r\n var value = _.compose(createObject, itemCollectionAsArray)(items);\r\n deferred.resolve(value);\r\n return value;\r\n }\r\n\r\n failure(sender: any, args: SP.ClientRequestFailedEventArgs, deferred: IDeferred): void {\r\n deferred.reject('Request failed. ' + args.get_message() +\r\n '\\n' + args.get_stackTrace());\r\n }\r\n}\r\n\r\nexport const combinePromises: (promises: IPromise[]) => IPromise = (promises: IPromise[]) => {\r\n return Q.all(promises).\r\n then(functional.compose2(_.first, _.filter));\r\n}\r\n\r\n//This function gets array of primises, resolves them applies all to the same object\r\nexport const combineObjects: (promises: IPromise[]) => IPromise = (promises: IPromise[]) => {\r\n return Q.all(promises).then(\r\n functional.compose2(_.curry(_.reduceRight)(_, (current, other) => {\r\n _.forEach(_.keys(other), (key: string) => { current[key] = other[key] });\r\n return current;\r\n }, {}, this), _.filter));\r\n}\r\n\r\n/**\r\n * Helpful type that allowes define mapping of SharePoint fields\r\n */\r\nexport type SPFieldMapping = { field: string, propertyName: string };\r\n \r\n/**\r\n * Generic handler: in case of success it returns an array of objects as specified in the constructor parameters\r\n */\r\nexport class GenericHandler implements ISpQueryResultsHandler {\r\n constructor(private mapping: SPFieldMapping[]) {}\r\n\r\n success(sender: any, args: SP.ClientRequestSucceededEventArgs, items: SP.ListItemCollection, deferred: IDeferred): any {\r\n var formatResult = (item: SP.ListItem) => {\r\n var createObject = (o: any, mapping: SPFieldMapping) => {\r\n let value = item.get_item(mapping.field);\r\n //The following is to fix an issue with Date.\r\n //When Date is serialized to the local storage it is serialized as a string. \r\n //Instead we should serialize it as the number of milliseconds\r\n if (value && item.get_item(mapping.field) instanceof SP.FieldUrlValue) {\r\n value['url'] = value.get_url();\r\n value['desc'] = value.get_description();\r\n }\r\n if (value && value.getTime) {\r\n value = \"\" + value.getTime();\r\n }\r\n o[mapping.propertyName] = value;\r\n return o;\r\n }\r\n return _.reduce(this.mapping, createObject, {});\r\n }\r\n var value = _.compose(functional.map(formatResult), itemCollectionAsArray)(items);\r\n deferred.resolve(value);\r\n return value;\r\n }\r\n\r\n failure(sender: any, args: SP.ClientRequestFailedEventArgs, deferred: IDeferred): void {\r\n deferred.reject('Request failed. ' + args.get_message());\r\n }\r\n}\r\n\r\n\r\n//The functions below are for parsing SharePoint fields\r\n/**\r\n * \r\n * @param fieldValue \r\n * @returns Lookup value\r\n */\r\nexport const getLookupValue = (fieldValue: any) => SP.FieldLookupValue.prototype.get_lookupValue.call(fieldValue);\r\n\r\n/**\r\n * \r\n * @param fieldValue \r\n * @returns Lookup id\r\n */\r\nexport const getLookupId = (fieldValue: any) => SP.FieldLookupValue.prototype.get_lookupId.call(fieldValue);"]}