@stratusjs/idx
Version:
AngularJS idx/property Service and Components bundle to be used as an add on to StratusJS
1 lines • 8.92 kB
JavaScript
System.register(["lodash","@stratusjs/runtime/stratus","angular","angular-material","angular-sanitize","@stratusjs/angularjs/services/collection","@stratusjs/core/misc","@stratusjs/core/environment"],function(exports_1,context_1){"use strict";var lodash_1,stratus_1,angular_1,collection_1,misc_1,environment_1,min,localDir;context_1&&context_1.id;return{setters:[function(lodash_1_1){lodash_1=lodash_1_1},function(stratus_1_1){stratus_1=stratus_1_1},function(angular_1_1){angular_1=angular_1_1},function(_1){},function(_2){},function(collection_1_1){collection_1=collection_1_1},function(misc_1_1){misc_1=misc_1_1},function(environment_1_1){environment_1=environment_1_1}],execute:function(){min=environment_1.cookie("env")?"":".min","idx","office","list",localDir=`${stratus_1.Stratus.BaseUrl}${stratus_1.Stratus.DeploymentPath}@stratusjs/idx/src/office/`,stratus_1.Stratus.Components.IdxOfficeList={bindings:{elementId:"@",tokenUrl:"@",urlLoad:"@",searchOnLoad:"@",detailsLinkPopup:"@",detailsLinkUrl:"@",detailsLinkTarget:"@",orderOptions:"@",query:"@",queryService:"@",template:"@",variableSync:"@"},controller($anchorScroll,$attrs,$q,$mdDialog,$timeout,$scope,$window,Idx){let defaultOptions,defaultQuery,lastQuery;$scope.uid=misc_1.safeUniqueId("idx","office","list"),$scope.elementId=$attrs.elementId||$scope.uid,stratus_1.Stratus.Instances[$scope.elementId]=$scope,$attrs.tokenUrl&&Idx.setTokenURL($attrs.tokenUrl);const init=async()=>{$scope.urlLoad=!(!$attrs.urlLoad||!misc_1.isJSON($attrs.urlLoad))&&JSON.parse($attrs.urlLoad),$scope.searchOnLoad=!(!$attrs.searchOnLoad||!misc_1.isJSON($attrs.searchOnLoad))&&JSON.parse($attrs.searchOnLoad),$scope.detailsLinkPopup=!$attrs.detailsLinkPopup||!misc_1.isJSON($attrs.detailsLinkPopup)||JSON.parse($attrs.detailsLinkPopup),$scope.detailsLinkUrl=$attrs.detailsLinkUrl||"/property/office/details",$scope.detailsLinkTarget=$attrs.detailsLinkTarget||"_self",$scope.query=$attrs.query&&misc_1.isJSON($attrs.query)?JSON.parse($attrs.query):{},$scope.query.service=$attrs.queryService&&misc_1.isJSON($attrs.queryService)?JSON.parse($attrs.queryService):$scope.query.service||[],$scope.query.order=$scope.query.order&&lodash_1.isString($scope.query.order)&&misc_1.isJSON($scope.query.order)?JSON.parse($scope.query.order):$attrs.queryOrder&&misc_1.isJSON($attrs.queryOrder)?JSON.parse($attrs.queryOrder):$scope.query.order||null,$scope.query.page??=null,$scope.query.perPage??=($attrs.queryPerPage&&lodash_1.isString($attrs.queryPerPage)?parseInt($attrs.queryPerPage,10):null)||($attrs.queryPerPage&&lodash_1.isNumber($attrs.queryPerPage)?$attrs.queryPerPage:null)||25,$scope.query.where=$attrs.queryWhere&&misc_1.isJSON($attrs.queryWhere)?JSON.parse($attrs.queryWhere):$scope.query.where||[],defaultOptions=JSON.parse(JSON.stringify($scope.query.where)),defaultQuery=JSON.parse(JSON.stringify($scope.query.where)),Idx.registerListInstance($scope.elementId,"office",$scope),$scope.searchOnLoad&&await $scope.search($scope.query,!1,!1),$scope.$applyAsync(()=>{$scope.initialized=!0,Idx.emit("init",$scope)})};this.$onInit=()=>{$scope.Idx=Idx,$scope.collection=new collection_1.Collection({});let initNow=!0;if(Object.prototype.hasOwnProperty.call($attrs.$attr,"initNow")&&(initNow=!!misc_1.isJSON($attrs.initNow)&&JSON.parse($attrs.initNow)),initNow)return void init().then();const stopWatchingInitNow=$scope.$watch("$ctrl.initNow",initNowCtrl=>{!0===initNowCtrl&&($scope.initialized||init().then(),stopWatchingInitNow())})},$scope.$watch("collection.models",()=>{$scope.collection.completed&&Idx.emit("collectionUpdated",$scope,lodash_1.clone($scope.collection))}),$scope.getPageModels=()=>{const offices=[];return $scope.collection.models.slice($scope.query.perPage*($scope.query.page-1),$scope.query.perPage*$scope.query.page).forEach(member=>{offices.push(member)}),offices},$scope.scrollToModel=model=>{$anchorScroll(`${$scope.elementId}_${model._id}`)},$scope.search=async(query,refresh,updateUrl)=>$q(async resolve=>{query??={},updateUrl=!1!==updateUrl||updateUrl,Object.keys(query.where).length>0&&($scope.query.where=query.where),query.where.page&&(query.page=query.where.page,delete query.where.page),query.where.Page&&(query.page=query.where.Page,delete query.where.Page),query.page&&($scope.query.page=query.page),refresh&&($scope.query.page=1),query.where.order&&(query.order=query.where.order,delete query.where.order),query.where.Order&&(query.order=query.where.Order,delete query.where.Order),query.order&&($scope.query.order=query.order),query.hasOwnProperty("service")&&!lodash_1.isNil(query.service)&&($scope.query.service=query.service),Idx.emit("searching",$scope,lodash_1.clone($scope.query));try{const results=await Idx.fetchOffices($scope.elementId,"collection",$scope.query,refresh);lastQuery=lodash_1.cloneDeep($scope.query),Idx.emit("searched",$scope,lodash_1.clone($scope.query)),resolve(results)}catch(e){console.error("Unable to fetchMembers:",e)}}),$scope.pageChange=async(pageNumber,ev)=>{$scope.collection.pending||(Idx.emit("pageChanging",$scope,lodash_1.clone($scope.query.page)),ev&&ev.preventDefault(),$scope.query.page=pageNumber,await $scope.search(),Idx.emit("pageChanged",$scope,lodash_1.clone($scope.query.page)))},$scope.pageNext=async ev=>{$scope.collection.pending||($scope.query.page||($scope.query.page=1),$scope.collection.completed&&$scope.query.page<$scope.collection.meta.data.totalPages&&(lodash_1.isString($scope.query.page)&&($scope.query.page=parseInt($scope.query.page,10)),await $scope.pageChange($scope.query.page+1,ev)))},$scope.pagePrevious=async ev=>{if(!$scope.collection.pending&&($scope.query.page||($scope.query.page=1),$scope.collection.completed&&$scope.query.page>1)){lodash_1.isString($scope.query.page)&&($scope.query.page=parseInt($scope.query.page,10));const prev=$scope.query.page-1||1;await $scope.pageChange(prev,ev)}},$scope.orderChange=async(order,ev)=>{$scope.collection.pending||(Idx.emit("orderChanging",$scope,lodash_1.clone(order)),ev&&ev.preventDefault(),$scope.query.order=order,await $scope.search(null,!0,!0),Idx.emit("orderChanged",$scope,lodash_1.clone(order)))},$scope.highlightModel=(model,timeout)=>{timeout??=0,model._unmapped??={},$scope.$applyAsync(()=>{model._unmapped._highlight=!0}),timeout>0&&$timeout(()=>{$scope.unhighlightModel(model)},timeout)},$scope.unhighlightModel=model=>{model&&(model._unmapped??={},$scope.$applyAsync(()=>{model._unmapped._highlight=!1}))},$scope.displayModelDetails=(model,ev)=>{if(ev&&ev.preventDefault(),!0===$scope.detailsLinkPopup){const templateOptions={element_id:"property_member_detail_popup",service:model._ServiceId,"member-key":model.MemberKey,"page-title":!0};$scope.googleApiKey&&(templateOptions["google-api-key"]=$scope.googleApiKey);let template='<md-dialog aria-label="'+model.MemberKey+'"><stratus-idx-member-details ';lodash_1.forEach(templateOptions,(optionValue,optionKey)=>{template+=`${optionKey}='${optionValue}'`}),template+="></stratus-idx-member-details></md-dialog>",$mdDialog.show({template,parent:angular_1.element(document.body),targetEvent:ev,clickOutsideToClose:!0,fullscreen:!0}).then(()=>{},()=>{Idx.setPageTitle(),$timeout(()=>Idx.unregisterDetailsInstance("property_member_detail_popup","member"),10)})}else $window.open($scope.getDetailsURL(model),$scope.detailsLinkTarget)},$scope.variableInject=async member=>{$scope.variableSyncing=$attrs.variableSync&&misc_1.isJSON($attrs.variableSync)?JSON.parse($attrs.variableSync):{},Object.keys($scope.variableSyncing).forEach(elementId=>{const varElement=Idx.getInput(elementId);if(varElement)if(Object.prototype.hasOwnProperty.call(member,$scope.variableSyncing[elementId]))varElement.val(member[$scope.variableSyncing[elementId]]);else if("MemberFullName"===$scope.variableSyncing[elementId]&&Object.prototype.hasOwnProperty.call(member,"MemberFirstName")&&Object.prototype.hasOwnProperty.call(member,"MemberLastName"))varElement.val(member.MemberFirstName+" "+member.MemberLastName);else if("MemberFirstName"===$scope.variableSyncing[elementId]&&!Object.prototype.hasOwnProperty.call(member,"MemberFirstName")&&Object.prototype.hasOwnProperty.call(member,"MemberFullName")){const firstName=member.MemberFullName.split(" ").shift();varElement.val(firstName)}else if("MemberLastName"===$scope.variableSyncing[elementId]&&!Object.prototype.hasOwnProperty.call(member,"MemberLastName")&&Object.prototype.hasOwnProperty.call(member,"MemberFullName")){const lastName=member.MemberFullName.split(" ").join(" ");varElement.val(lastName)}else"OfficeNumber"===$scope.variableSyncing[elementId]&&(Object.prototype.hasOwnProperty.call(member,"OfficeMlsId")?varElement.val(member.OfficeMlsId):Object.prototype.hasOwnProperty.call(member,"OfficeKey")&&varElement.val(member.OfficeKey))})},$scope.on=(emitterName,callback)=>Idx.on($scope.elementId,emitterName,callback),$scope.remove=()=>{}},templateUrl:$attrs=>`${localDir}${$attrs.template||"list"}.component${min}.html`}}}});