UNPKG

@stratusjs/idx

Version:

AngularJS idx/property Service and Components bundle to be used as an add on to StratusJS

336 lines (334 loc) 18.6 kB
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, packageName, moduleName, componentName, localDir; var __moduleName = 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' : ''; packageName = 'idx'; moduleName = 'office'; componentName = 'list'; localDir = `${stratus_1.Stratus.BaseUrl}${stratus_1.Stratus.DeploymentPath}@stratusjs/${packageName}/src/${moduleName}/`; 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) { $scope.uid = misc_1.safeUniqueId(packageName, moduleName, componentName); $scope.elementId = $attrs.elementId || $scope.uid; stratus_1.Stratus.Instances[$scope.elementId] = $scope; if ($attrs.tokenUrl) { Idx.setTokenURL($attrs.tokenUrl); } let defaultOptions; let defaultQuery; let lastQuery; const init = async () => { $scope.urlLoad = $attrs.urlLoad && misc_1.isJSON($attrs.urlLoad) ? JSON.parse($attrs.urlLoad) : false; $scope.searchOnLoad = $attrs.searchOnLoad && misc_1.isJSON($attrs.searchOnLoad) ? JSON.parse($attrs.searchOnLoad) : false; $scope.detailsLinkPopup = $attrs.detailsLinkPopup && misc_1.isJSON($attrs.detailsLinkPopup) ? JSON.parse($attrs.detailsLinkPopup) : true; $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, moduleName, $scope); if ($scope.searchOnLoad) { await $scope.search($scope.query, false, false); } $scope.$applyAsync(() => { $scope.initialized = true; Idx.emit('init', $scope); }); }; this.$onInit = () => { $scope.Idx = Idx; $scope.collection = new collection_1.Collection({}); let initNow = true; if (Object.prototype.hasOwnProperty.call($attrs.$attr, 'initNow')) { initNow = misc_1.isJSON($attrs.initNow) ? JSON.parse($attrs.initNow) : false; } if (initNow) { init().then(); return; } const stopWatchingInitNow = $scope.$watch('$ctrl.initNow', (initNowCtrl) => { if (initNowCtrl !== true) { return; } if (!$scope.initialized) { init().then(); } stopWatchingInitNow(); }); }; $scope.$watch('collection.models', () => { if ($scope.collection.completed) { Idx.emit('collectionUpdated', $scope, lodash_1.clone($scope.collection)); } }); $scope.getPageModels = () => { const offices = []; const models = $scope.collection.models; models.slice(($scope.query.perPage * ($scope.query.page - 1)), ($scope.query.perPage * $scope.query.page)).forEach((member) => { offices.push(member); }); return offices; }; $scope.scrollToModel = (model) => { $anchorScroll(`${$scope.elementId}_${model._id}`); }; $scope.search = async (query, refresh, updateUrl) => $q(async (resolve) => { query ??= {}; updateUrl = updateUrl === false ? updateUrl : true; if (Object.keys(query.where).length > 0) { $scope.query.where = query.where; } if (query.where.page) { query.page = query.where.page; delete query.where.page; } if (query.where.Page) { query.page = query.where.Page; delete query.where.Page; } if (query.page) { $scope.query.page = query.page; } if (refresh) { $scope.query.page = 1; } if (query.where.order) { query.order = query.where.order; delete query.where.order; } if (query.where.Order) { query.order = query.where.Order; delete query.where.Order; } if (query.order) { $scope.query.order = query.order; } if (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) => { if ($scope.collection.pending) { return; } Idx.emit('pageChanging', $scope, lodash_1.clone($scope.query.page)); if (ev) { ev.preventDefault(); } $scope.query.page = pageNumber; await $scope.search(); Idx.emit('pageChanged', $scope, lodash_1.clone($scope.query.page)); }; $scope.pageNext = async (ev) => { if ($scope.collection.pending) { return; } if (!$scope.query.page) { $scope.query.page = 1; } if ($scope.collection.completed && $scope.query.page < $scope.collection.meta.data.totalPages) { if (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) { return; } if (!$scope.query.page) { $scope.query.page = 1; } if ($scope.collection.completed && $scope.query.page > 1) { if (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) => { if ($scope.collection.pending) { return; } Idx.emit('orderChanging', $scope, lodash_1.clone(order)); if (ev) { ev.preventDefault(); } $scope.query.order = order; await $scope.search(null, true, true); Idx.emit('orderChanged', $scope, lodash_1.clone(order)); }; $scope.highlightModel = (model, timeout) => { timeout ??= 0; model._unmapped ??= {}; $scope.$applyAsync(() => { model._unmapped._highlight = true; }); if (timeout > 0) { $timeout(() => { $scope.unhighlightModel(model); }, timeout); } }; $scope.unhighlightModel = (model) => { if (model) { model._unmapped ??= {}; $scope.$applyAsync(() => { model._unmapped._highlight = false; }); } }; $scope.displayModelDetails = (model, ev) => { if (ev) { ev.preventDefault(); } if ($scope.detailsLinkPopup === true) { const templateOptions = { element_id: 'property_member_detail_popup', service: model._ServiceId, 'member-key': model.MemberKey, 'page-title': true }; if ($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: true, fullscreen: true }) .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 ($scope.variableSyncing[elementId] === 'MemberFullName' && Object.prototype.hasOwnProperty.call(member, 'MemberFirstName') && Object.prototype.hasOwnProperty.call(member, 'MemberLastName')) { varElement.val(member.MemberFirstName + ' ' + member.MemberLastName); } else if ($scope.variableSyncing[elementId] === 'MemberFirstName' && !Object.prototype.hasOwnProperty.call(member, 'MemberFirstName') && Object.prototype.hasOwnProperty.call(member, 'MemberFullName')) { const nameArray = member.MemberFullName.split(' '); const firstName = nameArray.shift(); varElement.val(firstName); } else if ($scope.variableSyncing[elementId] === 'MemberLastName' && !Object.prototype.hasOwnProperty.call(member, 'MemberLastName') && Object.prototype.hasOwnProperty.call(member, 'MemberFullName')) { const nameArray = member.MemberFullName.split(' '); const lastName = nameArray.join(' '); varElement.val(lastName); } else if ($scope.variableSyncing[elementId] === 'OfficeNumber') { if (Object.prototype.hasOwnProperty.call(member, 'OfficeMlsId')) { varElement.val(member.OfficeMlsId); } else if (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 || componentName}.component${min}.html` }; } }; }); //# sourceMappingURL=list.component.js.map