@flowlist/js-core 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/js-core.es.js +12 -2
- package/dist/js-core.umd.js +1 -1
- package/package.json +1 -1
- package/src/actions.ts +11 -3
- package/src/utils.ts +1 -1
package/dist/js-core.es.js
CHANGED
|
@@ -56,7 +56,7 @@ const generateDefaultField = (opts = {}) => __spreadValues(__spreadValues({}, {
|
|
|
56
56
|
result: [],
|
|
57
57
|
noMore: false,
|
|
58
58
|
nothing: false,
|
|
59
|
-
loading:
|
|
59
|
+
loading: true,
|
|
60
60
|
error: null,
|
|
61
61
|
extra: null,
|
|
62
62
|
fetched: false,
|
|
@@ -341,7 +341,7 @@ const initData = ({
|
|
|
341
341
|
if (fieldData && fieldData.error && !doRefresh) {
|
|
342
342
|
return resolve(null);
|
|
343
343
|
}
|
|
344
|
-
if (fieldData && fieldData.loading) {
|
|
344
|
+
if (fieldData && fieldData.loading && fieldData.fetched && !doRefresh && !needReset) {
|
|
345
345
|
return resolve(null);
|
|
346
346
|
}
|
|
347
347
|
const dontFetch = fieldData && fieldData.fetched && !doRefresh;
|
|
@@ -360,6 +360,11 @@ const initData = ({
|
|
|
360
360
|
const loadData = () => new Promise((res) => {
|
|
361
361
|
const getDataFromAPI = () => {
|
|
362
362
|
const funcCaller = typeof func === "string" ? api[func] : func;
|
|
363
|
+
if (!funcCaller) {
|
|
364
|
+
const error = new Error("func is not a function");
|
|
365
|
+
SET_ERROR({ setter, fieldName, error });
|
|
366
|
+
reject(error);
|
|
367
|
+
}
|
|
363
368
|
funcCaller(params).then(res).catch((error) => {
|
|
364
369
|
SET_ERROR({ setter, fieldName, error });
|
|
365
370
|
reject(error);
|
|
@@ -465,6 +470,11 @@ const loadMore = ({
|
|
|
465
470
|
params[ENUM.FIELD_DATA.EXTRA_KEY] = fieldData[ENUM.FIELD_DATA.EXTRA_KEY];
|
|
466
471
|
const getData = () => {
|
|
467
472
|
const funcCaller = typeof func === "string" ? api[func] : func;
|
|
473
|
+
if (!funcCaller) {
|
|
474
|
+
const error = new Error("func is not a function");
|
|
475
|
+
SET_ERROR({ setter, fieldName, error });
|
|
476
|
+
reject(error);
|
|
477
|
+
}
|
|
468
478
|
funcCaller(params).then((data) => {
|
|
469
479
|
SET_DATA({
|
|
470
480
|
getter,
|
package/dist/js-core.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var J=Object.defineProperty,W=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var k=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var
|
|
1
|
+
var J=Object.defineProperty,W=Object.defineProperties;var Z=Object.getOwnPropertyDescriptors;var k=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var w=(l,c,n)=>c in l?J(l,c,{enumerable:!0,configurable:!0,writable:!0,value:n}):l[c]=n,u=(l,c)=>{for(var n in c||(c={}))v.call(c,n)&&w(l,n,c[n]);if(k)for(var n of k(c))q.call(c,n)&&w(l,n,c[n]);return l},G=(l,c)=>W(l,Z(c));(function(l,c){typeof exports=="object"&&typeof module!="undefined"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(l=typeof globalThis!="undefined"?globalThis:l||self,c(l.JsCore={}))})(this,function(l){"use strict";const c=["jump","sinceId","page","seenIds","auto"];var n={SETTER_TYPE:{RESET:0,MERGE:1},FETCH_TYPE_ARRAY:c,FETCH_TYPE:{PAGINATION:c[0],SINCE_FIRST_OR_END_ID:c[1],SCROLL_LOAD_MORE:c[2],HAS_LOADED_IDS:c[3],AUTO:c[4]},CHANGE_TYPE:{SEARCH_FIELD:"search",RESET_FIELD:"reset",RESULT_UPDATE_KV:"update",RESULT_ADD_AFTER:"push",RESULT_ADD_BEFORE:"unshift",RESULT_REMOVE_BY_ID:"delete",RESULT_INSERT_TO_BEFORE:"insert-before",RESULT_INSERT_TO_AFTER:"insert-after",RESULT_LIST_MERGE:"patch",RESULT_ITEM_MERGE:"merge"},FIELD_DATA:{RESULT_KEY:"result",EXTRA_KEY:"extra"},DEFAULT_UNIQUE_KEY_NAME:"id"};const j=t=>t.result===void 0,U=(t={})=>u({result:[],noMore:!1,nothing:!1,loading:!0,error:null,extra:null,fetched:!1,page:0,total:0},t),O=({func:t,type:_,query:e={}})=>{t=typeof t=="string"?t:`api-${Math.random().toString(36).substring(2)}`,_=_||"auto";let s=`${t}-${_}`;return Object.keys(e).filter(E=>!~["undefined","object","function"].indexOf(typeof e[E])&&!~["page","is_up","since_id","seen_ids","__refresh__","__reload__"].indexOf(E)).sort().forEach(E=>{s+=`-${E}-${e[E]}`}),s},L=(t,_)=>{if(!_)return t||"";let e=t||"";return(F(_)?_:_.split(".")).forEach(E=>{e=e[E]}),e||""},M=(t,_,e)=>{if(/\./.test(_)){const s=_.split("."),E=s.pop();let i=t;s.forEach(o=>{i=i[o]}),i[E]=e}else t[_]=e},K=(t,_,e)=>{if(F(t)){const s=N(_,t,e);return s<0?void 0:t[s]}return t[_]},N=(t,_,e)=>{let s=-1;for(let E=0;E<_.length;E++)if(L(_[E],e.toString()).toString()===(t||"").toString()){s=E;break}return s},x=(t,_,e)=>{F(_)?_.forEach(s=>{const E=L(s,e).toString();t.forEach((i,o)=>{L(i,e).toString()===E&&(t[o]=u(u({},i),s))})}):Object.keys(_).forEach(s=>{const E=(s||"").toString();t.forEach((i,o)=>{L(i,e).toString()===E&&(t[o]=u(u({},i),_[s]))})})},F=t=>Object.prototype.toString.call(t)==="[object Array]",H=(t,_,e,s,E)=>{if(s===n.FETCH_TYPE.PAGINATION){t[_]=e;return}if(F(e)){t[_]=E?e.concat(t[_]||[]):(t[_]||[]).concat(e);return}if(_!==n.FIELD_DATA.RESULT_KEY){t[_]=e;return}F(t[_])&&(t[_]={}),Object.keys(e).forEach(i=>{t[_][i]=t[_][i]?E?e[i].concat(t[_][i]):t[_][i].concat(e[i]):e[i]})},C=t=>{let _=0;return F(t)?_=t.length:Object.keys(t).forEach(e=>{_+=t[e].length}),_},b=({field:t,uniqueKey:_,query:e={},type:s})=>{const E={};if(t.fetched){const i=_||n.DEFAULT_UNIQUE_KEY_NAME;s===n.FETCH_TYPE.AUTO?(E.seen_ids=t.result.map(o=>L(o,i)).join(","),E.since_id=L(t.result[e.is_up?0:t.result.length-1],i),E.is_up=e.is_up?1:0,E.page=e.page||t.page+1):s===n.FETCH_TYPE.HAS_LOADED_IDS?E.seen_ids=t.result.map(o=>L(o,i)).join(","):s===n.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(E.since_id=L(t.result[e.is_up?0:t.result.length-1],i),E.is_up=e.is_up?1:0):s===n.FETCH_TYPE.PAGINATION?E.page=e.page:s===n.FETCH_TYPE.SCROLL_LOAD_MORE&&(E.page=t.page+1)}else s===n.FETCH_TYPE.AUTO?(E.seen_ids="",E.since_id=e.sinceId||(e.is_up?999999999:0),E.is_up=e.is_up?1:0,E.page=e.page||t.page||1):s===n.FETCH_TYPE.HAS_LOADED_IDS?E.seen_ids="":s===n.FETCH_TYPE.SINCE_FIRST_OR_END_ID?(E.since_id=e.sinceId||(e.is_up?999999999:0),E.is_up=e.is_up?1:0):s===n.FETCH_TYPE.PAGINATION?E.page=e.page||t.page:s===n.FETCH_TYPE.SCROLL_LOAD_MORE&&(E.page=1);return u(u({},e),E)};var B=Object.freeze(Object.defineProperty({__proto__:null,isObjectResult:j,generateDefaultField:U,generateFieldName:O,getObjectDeepValue:L,updateObjectDeepValue:M,searchValueByKey:K,computeMatchedItemIndex:N,combineArrayData:x,isArray:F,setReactivityField:H,computeResultLength:C,generateRequestParams:b},Symbol.toStringTag,{value:"Module"}));const V=({getter:t,setter:_,data:e,fieldName:s,type:E,page:i,insertBefore:o})=>new Promise((I,S)=>{const a=t(s);if(!a){S();return}let A,f;if(j(e))A=e,a.nothing=!1,a.fetched=!0,a.noMore=!0,a.page=-1;else{A=e.result,f=e.extra;const R=C(A)===0;a.nothing=a.fetched?!1:R,a.fetched=!0,a.total=e.total||0,E===n.FETCH_TYPE.PAGINATION?(a.noMore=!1,a.page=+i):(a.noMore=e.no_more||R,a.page=a.page+1)}a.loading=!1,H(a,n.FIELD_DATA.RESULT_KEY,A,E,o),f&&H(a,n.FIELD_DATA.EXTRA_KEY,f,E,o),_({key:s,type:n.SETTER_TYPE.RESET,value:a,callback:()=>{I(null)}})}),m=({setter:t,fieldName:_,error:e})=>{t({key:_,type:n.SETTER_TYPE.MERGE,value:{error:e,loading:!1}})},X=({getter:t,setter:_,func:e,type:s,query:E,opts:i})=>new Promise(o=>{const I=O({func:e,type:s,query:E});if(t(I)){o(null);return}_({key:I,type:n.SETTER_TYPE.RESET,value:U(i),callback:()=>{o(null)}})}),$=({getter:t,setter:_,func:e,type:s,query:E,api:i,uniqueKey:o,callback:I})=>new Promise((S,a)=>{const A=O({func:e,type:s,query:E}),f=t(A),R=!!(E!=null&&E.__refresh__),T=!!(E!=null&&E.__reload__);if(f&&f.error&&!R||f&&f.loading&&f.fetched&&!R&&!T)return S(null);const D=f&&f.fetched&&!R;if(D)return S(null);const g=b({field:G(u({},f),{fetched:!1}),uniqueKey:o,query:E,type:s}),d=()=>{(()=>new Promise(h=>{(()=>{const Y=typeof e=="string"?i[e]:e;if(!Y){const P=new Error("func is not a function");m({setter:_,fieldName:A,error:P}),a(P)}Y(g).then(h).catch(P=>{m({setter:_,fieldName:A,error:P}),a(P)})})()}))().then(h=>{const r=()=>{V({getter:t,setter:_,data:h,fieldName:A,type:s,page:g.page||0,insertBefore:!1}).then(()=>{I&&I({params:g,data:h,refresh:R}),S(null)})};T?_({key:A,type:n.SETTER_TYPE.RESET,value:U(),callback:r}):r()})};!D&&!T?_({key:A,type:n.SETTER_TYPE.RESET,value:G(u({},U()),{loading:!0,error:null}),callback:d}):d()}),Q=({getter:t,setter:_,query:e,type:s,func:E,api:i,uniqueKey:o,errorRetry:I,callback:S})=>new Promise((a,A)=>{const f=O({func:E,type:s,query:e}),R=t(f);if(!R||R.loading||R.nothing||R.noMore&&!I||s===n.FETCH_TYPE.PAGINATION&&e&&+e.page===R.page)return a(null);let T;s===n.FETCH_TYPE.PAGINATION?T={loading:!0,error:null,[n.FIELD_DATA.RESULT_KEY]:[],[n.FIELD_DATA.EXTRA_KEY]:null}:T={loading:!0,error:null};const D=b({field:R,uniqueKey:o,query:e,type:s});D[n.FIELD_DATA.EXTRA_KEY]=R[n.FIELD_DATA.EXTRA_KEY];const g=()=>{const d=typeof E=="string"?i[E]:E;if(!d){const p=new Error("func is not a function");m({setter:_,fieldName:f,error:p}),A(p)}d(D).then(p=>{V({getter:t,setter:_,data:p,fieldName:f,type:s,page:D.page||0,insertBefore:!!(e!=null&&e.is_up)}).then(()=>{S&&S({params:D,data:p,refresh:!1}),a(null)})}).catch(p=>{m({setter:_,fieldName:f,error:p}),A(p)})};_({key:f,type:n.SETTER_TYPE.MERGE,value:T,callback:g})}),z=({getter:t,setter:_,type:e,func:s,query:E,method:i,value:o,id:I,uniqueKey:S,changeKey:a})=>new Promise((A,f)=>{const R=O({func:s,type:e,query:E}),T=t(R);if(!T){f();return}if(T.page===-1){A(null);return}const D=I||"",g=S||n.DEFAULT_UNIQUE_KEY_NAME,d=a||n.FIELD_DATA.RESULT_KEY,p=C(T[n.FIELD_DATA.RESULT_KEY]);if(i===n.CHANGE_TYPE.SEARCH_FIELD)A(K(T[n.FIELD_DATA.RESULT_KEY],D,g));else if(i===n.CHANGE_TYPE.RESULT_UPDATE_KV){const r=N(D,T[n.FIELD_DATA.RESULT_KEY],g);M(T[n.FIELD_DATA.RESULT_KEY][r],d,o)}else if(i===n.CHANGE_TYPE.RESULT_ITEM_MERGE){const r=N(D,T[n.FIELD_DATA.RESULT_KEY],g);T[n.FIELD_DATA.RESULT_KEY][r]=u(u({},T[n.FIELD_DATA.RESULT_KEY][r]),o)}else if(i===n.CHANGE_TYPE.RESET_FIELD)M(T,d,o);else{let r=L(T,d);const Y=N(D,r,g);switch(i){case n.CHANGE_TYPE.RESULT_ADD_AFTER:F(o)?r=r.concat(o):r.push(o);break;case n.CHANGE_TYPE.RESULT_ADD_BEFORE:F(o)?r=o.concat(r):r.unshift(o);break;case n.CHANGE_TYPE.RESULT_REMOVE_BY_ID:Y>=0?r.splice(Y,1):F(D)&&(r=r.filter(P=>D.indexOf(P[g])===-1));break;case n.CHANGE_TYPE.RESULT_INSERT_TO_BEFORE:Y>=0&&r.splice(Y,0,o);break;case n.CHANGE_TYPE.RESULT_INSERT_TO_AFTER:Y>=0&&r.splice(Y+1,0,o);break;case n.CHANGE_TYPE.RESULT_LIST_MERGE:x(r,o,g);break}T[d]=r}const h=C(T[n.FIELD_DATA.RESULT_KEY]);T.total=T.total+h-p,T.nothing=h===0,_({key:R,type:n.SETTER_TYPE.MERGE,value:T,callback:()=>{A(null)}})});l.ENUM=n,l.initData=$,l.initState=X,l.loadMore=Q,l.updateState=z,l.utils=B,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/package.json
CHANGED
package/src/actions.ts
CHANGED
|
@@ -67,7 +67,7 @@ export const initData = ({
|
|
|
67
67
|
return resolve(null)
|
|
68
68
|
}
|
|
69
69
|
// 正在请求中,return
|
|
70
|
-
if (fieldData && fieldData.loading) {
|
|
70
|
+
if (fieldData && fieldData.loading && fieldData.fetched && !doRefresh && !needReset) {
|
|
71
71
|
return resolve(null)
|
|
72
72
|
}
|
|
73
73
|
// 这个 field 已经请求过了
|
|
@@ -91,7 +91,11 @@ export const initData = ({
|
|
|
91
91
|
new Promise((res) => {
|
|
92
92
|
const getDataFromAPI = () => {
|
|
93
93
|
const funcCaller = typeof func === 'string' ? api[func] : func
|
|
94
|
-
|
|
94
|
+
if (!funcCaller) {
|
|
95
|
+
const error = new Error('func is not a function')
|
|
96
|
+
SET_ERROR({ setter, fieldName, error })
|
|
97
|
+
reject(error)
|
|
98
|
+
}
|
|
95
99
|
funcCaller(params)
|
|
96
100
|
.then(res)
|
|
97
101
|
.catch((error: Error) => {
|
|
@@ -223,7 +227,11 @@ export const loadMore = ({
|
|
|
223
227
|
|
|
224
228
|
const getData = () => {
|
|
225
229
|
const funcCaller = typeof func === 'string' ? api[func] : func
|
|
226
|
-
|
|
230
|
+
if (!funcCaller) {
|
|
231
|
+
const error = new Error('func is not a function')
|
|
232
|
+
SET_ERROR({ setter, fieldName, error })
|
|
233
|
+
reject(error)
|
|
234
|
+
}
|
|
227
235
|
funcCaller(params)
|
|
228
236
|
.then((data: any) => {
|
|
229
237
|
SET_DATA({
|