UNPKG

@stratusjs/angularjs

Version:

This is the AngularJS package for StratusJS.

1 lines 9.08 kB
System.register(["lodash","@stratusjs/runtime/stratus","@stratusjs/core/errors/errorBase","@stratusjs/core/datastore/modelBase","@stratusjs/core/events/eventManager","@stratusjs/core/environment","@stratusjs/core/misc","@stratusjs/core/datastore/xhr","./model","toastify-js"],function(exports_1,context_1){"use strict";var lodash_1,stratus_1,errorBase_1,modelBase_1,eventManager_1,environment_1,misc_1,xhr_1,model_1,toastify_js_1,CollectionOptionKeys,Collection;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(errorBase_1_1){errorBase_1=errorBase_1_1},function(modelBase_1_1){modelBase_1=modelBase_1_1},function(eventManager_1_1){eventManager_1=eventManager_1_1},function(environment_1_1){environment_1=environment_1_1},function(misc_1_1){misc_1=misc_1_1},function(xhr_1_1){xhr_1=xhr_1_1},function(model_1_1){model_1=model_1_1},function(toastify_js_1_1){toastify_js_1=toastify_js_1_1}],execute:function(){exports_1("CollectionOptionKeys",CollectionOptionKeys=["autoSave","autoSaveInterval","cache","direct","target","targetSuffix","urlRoot","watch","payload","convoy","headers"]),Collection=class extends eventManager_1.EventManager{name="Collection";direct=!1;target=null;targetSuffix=null;urlRoot="/Api";toast=!0;qualifier="";serviceId=null;infinite=!1;threshold=.5;decay=0;header=new modelBase_1.ModelBase;meta=new modelBase_1.ModelBase;model=model_1.Model;models=[];types=[];xhr;withCredentials=!1;headers={};cacheResponse={};cacheHeaders={};cache=!1;pending=!1;error=!1;completed=!1;filtering=!1;paginate=!1;watch=!1;autoSave=!1;autoSaveInterval=2500;throttle=lodash_1.throttle(this.fetch,1e3);constructor(options={}){if(super(),options=options&&"object"==typeof options?options:{},lodash_1.extend(this,options),this.target&&(this.urlRoot+="/"+misc_1.ucfirst(this.target)),options.convoy){const convoy=misc_1.isJSON(options.convoy)?JSON.parse(options.convoy):options.convoy;if(lodash_1.isObject(convoy)){this.meta.set(convoy.meta||{});const models=convoy.payload;lodash_1.isArray(models)?(this.inject(models),this.completed=!0):console.error("malformed payload:",models)}else console.error("malformed convoy:",convoy)}if(options.payload){const models=misc_1.isJSON(options.payload)?JSON.parse(options.payload):options.payload;lodash_1.isArray(models)?(this.inject(models),this.completed=!0):console.error("malformed payload:",models)}}sanitizeOptions(options){const sanitizedOptions={};return lodash_1.forEach(CollectionOptionKeys,key=>{const data=lodash_1.get(options,key);lodash_1.isUndefined(data)||lodash_1.set(sanitizedOptions,key,data)}),sanitizedOptions}serialize(obj,chain){const str=[];return obj=obj||{},lodash_1.forEach(obj,(value,key)=>{if(lodash_1.isObject(value))chain&&(key=chain+"["+key+"]"),str.push(this.serialize(value,key));else{let encoded="";chain&&(encoded+=chain+"["),encoded+=key,chain&&(encoded+="]"),str.push(encoded+"="+value)}}),str.join("&")}url(){return this.urlRoot+(this.targetSuffix||"")}inject(data,type){lodash_1.isArray(data)&&(this.types&&-1===this.types.indexOf(type)&&this.types.push(type),this.direct||data.forEach(target=>{this.models.push(new model_1.Model({autoSave:this.autoSave,autoSaveInterval:this.autoSaveInterval,collection:this,completed:!0,received:!0,toast:this.toast,type:type||null,watch:this.watch},target))}))}sync(action,data,options){return this.pending=!0,new Promise(async(resolve,reject)=>{options=options||{};const request={method:action=action||"GET",url:this.url(),headers:lodash_1.clone(this.headers),withCredentials:this.withCredentials};lodash_1.isUndefined(data)||("GET"===action?lodash_1.isObject(data)&&Object.keys(data).length&&(request.url+=request.url.includes("?")?"&":"?",request.url+=this.serialize(data)):(request.headers["Content-Type"]="application/json",request.data=JSON.stringify(data))),Object.prototype.hasOwnProperty.call(options,"headers")&&"object"==typeof options.headers&&Object.keys(options.headers).forEach(headerKey=>{request.headers[headerKey]=options.headers[headerKey]});const queryHash=`${request.method}:${request.url}`;options.nocache&&(queryHash in this.cacheResponse&&delete this.cacheResponse[queryHash],queryHash in this.cacheHeaders&&delete this.cacheHeaders[queryHash]),this.xhr=new xhr_1.XHR(request);const handler=response=>{if(!lodash_1.isObject(response)&&!lodash_1.isArray(response)){const error=new errorBase_1.ErrorBase({payload:response,message:`Invalid Payload: ${request.method} ${request.url}`},{});return this.error=!0,this.pending=!1,this.throttleTrigger("change"),this.trigger("error",error),void reject(error)}let responseHeaders=null;this.cache&&"GET"===request.method&&(queryHash in this.cacheResponse||(this.cacheResponse[queryHash]=lodash_1.cloneDeep(response)),queryHash in this.cacheHeaders?responseHeaders=this.cacheHeaders[queryHash]:this.cacheHeaders[queryHash]=this.xhr.getAllResponseHeaders()),this.header.set(responseHeaders||this.xhr.getAllResponseHeaders()),this.meta.set(response.meta||{}),this.models=[];const payload=response.payload||response;this.error=!1,this.meta.has("success")&&!this.meta.get("success")?this.error=!0:this.direct?this.models=payload:lodash_1.isArray(payload)?this.inject(payload):lodash_1.isObject(payload)?lodash_1.forEach(payload,(value,key)=>{this.inject(value,key)}):(this.meta.has("status")||this.meta.has("success")||(this.error=!0),console.warn(`Invalid Payload: ${request.method} ${request.url}`)),this.pending=!1,this.completed=!0,this.filtering=!lodash_1.isEmpty(this.meta.get("api.q")),this.paginate=!lodash_1.isEmpty(this.meta.get("api.p")),this.meta.clearTemp(),this.throttleTrigger("change"),this.trigger("complete"),resolve(this.models)};this.cache&&"GET"===request.method&&queryHash in this.cacheResponse?handler(this.cacheResponse[queryHash]):this.xhr.send().then(handler).catch(error=>{console.error(`XHR: ${request.method} ${request.url}`),this.throttleTrigger("change"),this.trigger("error",error),reject(error)})})}fetch(action,data,options){return new Promise(async(resolve,reject)=>{this.sync(action,data||this.meta.get("api"),options).then(resolve).catch(async error=>{if(console.error("FETCH:",error),!this.toast)return void reject(error);const errorMessage=this.errorMessage(error),formatMessage=errorMessage?`: ${errorMessage}`:".";toastify_js_1.default({text:`Unable to Fetch ${this.target}${formatMessage}`,duration:12e3,close:!0,stopOnFocus:!0,style:{background:"#E14D45"}}).showToast(),reject(error)})})}filter(query){return this.filtering=!lodash_1.isEmpty(query),this.meta.set("api.q",lodash_1.isUndefined(query)?"":query),this.meta.set("api.p",1),this.fetch()}throttleFilter(query){return this.meta.set("api.q",lodash_1.isUndefined(query)?"":query),new Promise((resolve,reject)=>{const request=this.throttle();environment_1.cookie("env")&&console.log("request:",request),request.then(models=>{environment_1.cookie("env"),resolve(models)}).catch(reject)})}page(page){this.paginate=!lodash_1.isEmpty(page),this.meta.set("api.p",page),this.fetch().then(),delete this.meta.get("api").p}toJSON(){return this.direct?this.models:this.models.map(model=>model.toJSON())}add(target,options){if(lodash_1.isObject(target))return options&&"object"==typeof options||(options={}),target instanceof model_1.Model?target.collection=this:(options.collection=this,(target=new model_1.Model(options,target)).initialize(),(options.autoSave||options.watch)&&(target.isNew()?target.save():target.completed||target.fetch())),options.save&&target.save(),options.prepend?this.models.unshift(target):this.models.push(target),options.trigger&&this.trigger("add",target),this.throttleTrigger("change"),target;console.error("collection.add: target object not set!")}remove(target){return this.direct||(this.models.splice(this.models.indexOf(target),1),this.throttleTrigger("change")),this}find(predicate){return lodash_1.find(this.models,lodash_1.isFunction(predicate)?predicate:model=>model.get("id")===predicate)}map(predicate){return lodash_1.map(this.models,model=>model instanceof model_1.Model?model.get(predicate):null)}pluck(attribute){return lodash_1.map(this.models,model=>model instanceof model_1.Model?model.pluck(attribute):null)}exists(attribute){return!!lodash_1.reduce(this.pluck(attribute)||[],(memo,data)=>memo||!lodash_1.isUndefined(data))}errorMessage(error){if(error instanceof errorBase_1.ErrorBase)return console.error(`[${error.code}] ${error.message}`,error),"Internal"!==error.code?error.message:null;const digest=error.responseText&&misc_1.isJSON(error.responseText)?JSON.parse(error.responseText):null;if(!digest)return null;const message=lodash_1.get(digest,"meta.status[0].message")||lodash_1.get(digest,"error.exception[0].message")||null;return message?!environment_1.cookie("env")&&lodash_1.has(digest,"error.exception[0].message")?(console.error("[xhr] server:",message),null):message:null}},exports_1("Collection",Collection),stratus_1.Stratus.Services.Collection=["$provide",$provide=>{$provide.factory("Collection",[()=>Collection])}],stratus_1.Stratus.Data.Collection=Collection}}});