@sysvale/show 0.3.0 → 1.0.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/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ ![SHOW logo](/assets/show-logo.webp)
2
+
3
+ Atenção: Se deseja utilizar o SHOW em projetos com Vue 2, utilize a versão `0.3.0` ou inferior.
4
+
1
5
  ## Instalando
2
6
 
3
7
  - O SHOW pode ser instalado com o npm:
@@ -1,8 +1,10 @@
1
+ import { h } from 'vue';
1
2
  import swal from 'sweetalert2';
2
3
  import get from 'lodash.get';
3
4
  import camelCase from 'lodash.camelcase';
4
5
  import isObject from 'lodash.isobject';
5
6
  import snakeCase from 'lodash.snakecase';
7
+ import keyBy from 'lodash.keyby';
6
8
 
7
9
  var isArray = function (arg) { return Array.isArray(arg); };
8
10
 
@@ -50,6 +52,18 @@ var convertKeysToSnakeCase = function (data) {
50
52
  return newData;
51
53
  };
52
54
 
55
+ function generateKey(length) {
56
+ if ( length === void 0 ) length = 8;
57
+
58
+ var result = '';
59
+ var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
60
+ var charactersLength = characters.length;
61
+ for (var i = 0; i < length; i += 1) {
62
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
63
+ }
64
+ return result;
65
+ }
66
+
53
67
  function getFirstErrorMessage(response, fallbackMsg) {
54
68
  if ( fallbackMsg === void 0 ) fallbackMsg = 'Não conseguimos processar sua requisição. Tente novamente.';
55
69
 
@@ -78,7 +92,17 @@ var ERROR_SWAL_DEFAULT_CONFIG = {
78
92
  };
79
93
 
80
94
  var script = {
95
+ inject: ['$_requestObserver'],
96
+ emits: ['success', 'error', 'success-feedback-ok', 'error-feedback-ok', 'success-feedback-cancel', 'error-feedback-cancel'],
81
97
  props: {
98
+ vid: {
99
+ type: String,
100
+ default: function () { return generateKey(); },
101
+ },
102
+ tag: {
103
+ type: String,
104
+ default: 'div',
105
+ },
82
106
  service: {
83
107
  type: Function,
84
108
  required: true,
@@ -142,6 +166,18 @@ var script = {
142
166
  };
143
167
  },
144
168
 
169
+ computed: {
170
+ requestState: function requestState() {
171
+ return {
172
+ loading: this.loading,
173
+ failed: this.failed,
174
+ succeeded: this.succeeded,
175
+ error: this.error,
176
+ data: this.data,
177
+ };
178
+ }
179
+ },
180
+
145
181
  watch: {
146
182
  forceResetError: function forceResetError(newValue) {
147
183
  if (newValue) {
@@ -156,6 +192,18 @@ var script = {
156
192
  }
157
193
  },
158
194
 
195
+ created: function created() {
196
+ if(this.$_requestObserver) {
197
+ this.$_requestObserver.subscribe(this);
198
+ }
199
+ },
200
+
201
+ beforeDestroy: function beforeDestroy() {
202
+ if(this.$_requestObserver) {
203
+ this.$_requestObserver.unsubscribe(this);
204
+ }
205
+ },
206
+
159
207
  methods: {
160
208
  action: function action(payloadFromArgs) {
161
209
  var this$1 = this;
@@ -216,7 +264,7 @@ var script = {
216
264
  });
217
265
  },
218
266
 
219
- labelHelper: function labelHelper(label, loadingLabel) {
267
+ loadingTextResolver: function loadingTextResolver(label, loadingLabel) {
220
268
  if ( loadingLabel === void 0 ) loadingLabel = 'Carregando...';
221
269
 
222
270
  if (this.loading) {
@@ -234,22 +282,16 @@ var script = {
234
282
  },
235
283
 
236
284
  render: function render() {
237
- var slotProvider = this.$slots || this.$scopedSlots;
238
- var slot = slotProvider.default({
239
- loading: this.loading,
240
- failed: this.failed,
241
- succeeded: this.succeeded,
242
- error: this.error,
243
- data: this.data,
244
- action: this.action,
245
- labelHelper: this.labelHelper,
285
+ var slotProvider = this.$slots;
286
+ var slot = slotProvider.default(Object.assign({}, this.requestState,
287
+ {action: this.action,
288
+ loadingTextResolver: this.loadingTextResolver,
246
289
  errorMessage: getFirstErrorMessage(
247
290
  get(this.error, 'response.data', null),
248
291
  'Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.'
249
- ),
250
- });
292
+ )}));
251
293
 
252
- return Array.isArray(slot) ? slot[0] : slot;
294
+ return h(this.tag, slot);
253
295
  },
254
296
  };
255
297
 
@@ -362,11 +404,181 @@ var __vue_script__ = script;
362
404
  undefined
363
405
  );
364
406
 
407
+ var booleanReduceByProp = function (arr, prop, operator, defaultValue) {
408
+ if ( operator === void 0 ) operator = '||';
409
+ if ( defaultValue === void 0 ) defaultValue = false;
410
+
411
+ return arr.reduce(function (acc, item) {
412
+ if(operator === '||') {
413
+ return acc || item[prop];
414
+ } else if(operator === '&&') {
415
+ return acc && item[prop];
416
+ }
417
+ }, defaultValue);
418
+ };
419
+
420
+ var script$1 = {
421
+ emits: ['success', 'error'],
422
+ props: {
423
+ vid: {
424
+ type: String,
425
+ default: function () { return generateKey(); },
426
+ },
427
+ tag: {
428
+ type: String,
429
+ default: 'div',
430
+ },
431
+ },
432
+ data: function data() {
433
+ return {
434
+ providers: [],
435
+ providersVids: {},
436
+ };
437
+ },
438
+ provide: function provide() {
439
+ return {
440
+ $_requestObserver: this,
441
+ }
442
+ },
443
+
444
+ computed: {
445
+ context: function context() {
446
+ return {
447
+ vid: this.vid,
448
+ loading: booleanReduceByProp(this.providers, 'loading'),
449
+ failed: booleanReduceByProp(this.providers, 'failed'),
450
+ succeeded: booleanReduceByProp(this.providers, 'succeeded', '&&', true),
451
+ errors: keyBy(this.providers.filter(function (ref) {
452
+ var failed = ref.failed;
453
+
454
+ return failed;
455
+ }).map(function (ref) {
456
+ var error = ref.error;
457
+ var vid = ref.vid;
458
+
459
+ return ({ error: error, vid: vid });
460
+ }), 'vid'),
461
+ providerRequestState: this.providerRequestState,
462
+ loadingTextResolver: this.loadingTextResolver,
463
+ };
464
+ },
465
+
466
+ providerRequestState: function providerRequestState() {
467
+ var this$1 = this;
468
+
469
+ return function (vid) {
470
+ var element = this$1.providers.find(function (ref) {
471
+ var providerVid = ref.vid;
472
+
473
+ return providerVid === vid;
474
+ });
475
+ return element ? element.requestState : {
476
+ loading: false,
477
+ failed: false,
478
+ succeeded: false,
479
+ error: null,
480
+ data: null,
481
+ };
482
+ }
483
+ },
484
+
485
+ loadingTextResolver: function loadingTextResolver() {
486
+ var this$1 = this;
487
+
488
+ return function (label, loadingLabel) {
489
+ if ( loadingLabel === void 0 ) loadingLabel = 'Carregando...';
490
+
491
+ if (this$1.context.loading) {
492
+ return loadingLabel;
493
+ }
494
+ return label;
495
+ }
496
+ },
497
+ },
498
+
499
+ watch: {
500
+ 'context.succeeded': {
501
+ handler: function handler(newValue) {
502
+ if (newValue) {
503
+ this.$emit('success', this.context);
504
+ }
505
+ },
506
+ },
507
+ 'context.failed': {
508
+ handler: function handler(newValue) {
509
+ if (newValue) {
510
+ this.$emit('error', this.context);
511
+ }
512
+ },
513
+ },
514
+ },
515
+
516
+ render: function render() {
517
+ var slotProvider = this.$slots;
518
+ var slot = slotProvider.default(this.context);
519
+ return h(this.tag, slot);
520
+ },
521
+
522
+ methods: {
523
+ subscribe: function subscribe(provider) {
524
+ if(!this.providersVids[provider.vid]) {
525
+ this.providersVids[provider.vid] = true;
526
+ this.providers.push(provider);
527
+ } else {
528
+ throw new Error(("Provider não reigistrado no observer! Já existe um provider com o vid >> " + (provider.vid) + " <<"));
529
+ }
530
+ },
531
+ unsubscribe: function unsubscribe(provider) {
532
+ delete this.providersVids[provider.vid];
533
+ this.providers.filter(function (ref) {
534
+ var vid = ref.vid;
535
+
536
+ return vid !== provider.vid;
537
+ });
538
+ },
539
+ },
540
+ };
541
+
542
+ /* script */
543
+ var __vue_script__$1 = script$1;
544
+
545
+ /* template */
546
+
547
+ /* style */
548
+ var __vue_inject_styles__$1 = undefined;
549
+ /* scoped */
550
+ var __vue_scope_id__$1 = undefined;
551
+ /* module identifier */
552
+ var __vue_module_identifier__$1 = undefined;
553
+ /* functional template */
554
+ var __vue_is_functional_template__$1 = undefined;
555
+ /* style inject */
556
+
557
+ /* style inject SSR */
558
+
559
+ /* style inject shadow dom */
560
+
561
+
562
+
563
+ var __vue_component__$1 = /*#__PURE__*/normalizeComponent(
564
+ {},
565
+ __vue_inject_styles__$1,
566
+ __vue_script__$1,
567
+ __vue_scope_id__$1,
568
+ __vue_is_functional_template__$1,
569
+ __vue_module_identifier__$1,
570
+ false,
571
+ undefined,
572
+ undefined,
573
+ undefined
574
+ );
575
+
365
576
 
366
577
 
367
578
  var components = /*#__PURE__*/Object.freeze({
368
579
  __proto__: null,
369
- RequestProvider: __vue_component__
580
+ RequestProvider: __vue_component__,
581
+ RequestObserver: __vue_component__$1
370
582
  });
371
583
 
372
584
  function removeAccents(str) {
@@ -393,18 +605,6 @@ function removeAccents(str) {
393
605
  return newStr;
394
606
  }
395
607
 
396
- function generateKey(length) {
397
- if ( length === void 0 ) length = 8;
398
-
399
- var result = '';
400
- var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
401
- var charactersLength = characters.length;
402
- for (var i = 0; i < length; i += 1) {
403
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
404
- }
405
- return result;
406
- }
407
-
408
608
  var utils = {
409
609
  $showConvertKeysToCamelCase: convertKeysToCamelCase,
410
610
  $showConvertKeysToSnakeCase: convertKeysToSnakeCase,
@@ -421,9 +621,7 @@ function install(app) {
421
621
  var version = Number(app.version.split('.')[0]);
422
622
 
423
623
  if (version <= 2) {
424
- Object.keys(utils).forEach(function (key) {
425
- app.prototype[key] = utils[key];
426
- });
624
+ throw new Error('Essa versão só é compatível com projetos que possuem o Vue 3. Para projetos com a Vue 2, utilize a versão 0.3.0 ou inferior');
427
625
  }
428
626
 
429
627
  if (version > 2) {
@@ -461,4 +659,4 @@ if (GlobalVue) {
461
659
  }
462
660
 
463
661
  export default plugin;
464
- export { __vue_component__ as RequestProvider };
662
+ export { __vue_component__$1 as RequestObserver, __vue_component__ as RequestProvider };
@@ -1 +1 @@
1
- var SHOW=function(e,t,r,o,n,a){"use strict";t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,o=o&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n,a=a&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a;var i=function(e){return Array.isArray(e)},s=function(e){if(i(e))return e.map((function(e){return n(e)||i(e)?s(e):e}));var t={};return Object.keys(e).forEach((function(r){n(e[r])||i(e[r])?t[o(r)]=s(e[r]):t[o(r)]=e[r]})),t},c=function(e){return Array.isArray(e)},u=function(e){if(c(e))return e.map((function(e){return n(e)||c(e)?u(e):e}));var t={};return Object.keys(e).forEach((function(r){n(e[r])||c(e[r])?t[a(r)]=u(e[r]):t[a(r)]=e[r]})),t};function l(e,t){void 0===t&&(t="Não conseguimos processar sua requisição. Tente novamente.");var o=r(e,"errors",!1);return o&&o[Object.keys(o)[0]][0]||t}var d={title:"Informações salvas com sucesso!",icon:"success",text:"",showCloseButton:!0,confirmButtonText:"Ok"},f={icon:"error",title:"Erro",text:"mensagem de error",showCancelButton:!0,showConfirmButton:!1,cancelButtonText:"Fechar"};function p(e,t,r,o,n,a,i,s,c,u){"boolean"!=typeof i&&(c=s,s=i,i=!1);var l,d="function"==typeof r?r.options:r;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,n&&(d.functional=!0)),o&&(d._scopeId=o),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,c(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=l):t&&(l=i?function(e){t.call(this,u(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),l)if(d.functional){var f=d.render;d.render=function(e,t){return l.call(t),f(e,t)}}else{var p=d.beforeCreate;d.beforeCreate=p?[].concat(p,l):[l]}return r}var h=p({},void 0,{props:{service:{type:Function,required:!0},payload:{type:Object,default:function(){return{}}},payloadResolver:{type:Function,default:function(e){return u(e)}},dataResolver:{type:Function,default:function(e){return s(e)}},successSwalConfig:{type:Object,default:function(){return d}},errorSwalConfig:{type:Object,default:function(){return f}},errorFeedbackResolver:{type:Function,default:null},successFeedbackResolver:{type:Function,default:null},showSuccessFeedback:{type:Boolean,default:!1},hideErrorFeedback:{type:Boolean,default:!1},immediate:{type:Boolean,default:!1},forceResetError:{type:Boolean,default:!1},initialData:{default:null}},data:function(){return{loading:!1,failed:!1,succeeded:!1,error:null,data:this.initialData}},watch:{forceResetError:function(e){e&&(this.error=null)}},mounted:function(){this.immediate&&this.action()},methods:{action:function(e){var o=this;this.startRequest();var n=e||this.payload;this.service(this.payloadResolver(n)).then((function(e){var r=e.data;if(o.data=o.dataResolver(r),o.succeeded=!0,o.$emit("success",o.data),o.showSuccessFeedback){if(o.successFeedbackResolver)return void o.successFeedbackResolver({vm:o,data:o.data});t.fire(Object.assign({},d,o.successSwalConfig)).then((function(){o.$emit("success-feedback-ok",o.data)}))}})).catch((function(e){if(o.failed=!0,o.error=e,o.$emit("error",e),!o.hideErrorFeedback){var n=l(r(e,"response.data",null),"Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.");if(o.errorFeedbackResolver)return void o.errorFeedbackResolver({vm:o,error:e,errorMessage:n});t.fire(Object.assign({},f,o.errorSwalConfig,{text:n})).then((function(t){t.isDismissed&&o.$emit("error-feedback-cancel",e),t.isConfirmed&&o.$emit("error-feedback-ok",e)}))}})).finally((function(){o.loading=!1}))},labelHelper:function(e,t){return void 0===t&&(t="Carregando..."),this.loading?t:e},startRequest:function(){this.loading=!0,this.failed=!1,this.succeeded=!1,this.error=null}},render:function(){var e=(this.$slots||this.$scopedSlots).default({loading:this.loading,failed:this.failed,succeeded:this.succeeded,error:this.error,data:this.data,action:this.action,labelHelper:this.labelHelper,errorMessage:l(r(this.error,"response.data",null),"Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.")});return Array.isArray(e)?e[0]:e}},void 0,void 0,void 0,!1,void 0,void 0,void 0),v=Object.freeze({__proto__:null,RequestProvider:h});var y={$showConvertKeysToCamelCase:s,$showConvertKeysToSnakeCase:u,$showRemoveAccents:function(e){void 0===e&&(e="");for(var t,r=e.length,o=e.split(""),n=0;n<r;n+=1)-1!==(t="ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž".indexOf(e[n]))&&(o[n]="AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz"[t]);return o=(o=(o=(o=o.join("")).split(".").join("")).split("-").join("")).split("/").join("")},$showGenerateKey:function(e){void 0===e&&(e=8);for(var t="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o=r.length,n=0;n<e;n+=1)t+=r.charAt(Math.floor(Math.random()*o));return t}};var b={install:function e(t){if(!e.installed){e.installed=!0;var r=Number(t.version.split(".")[0]);r<=2&&Object.keys(y).forEach((function(e){t.prototype[e]=y[e]})),r>2&&Object.keys(y).forEach((function(e){t.config.globalProperties[e]=y[e]})),Object.keys(v).forEach((function(e){t.component("Show"+e,v[e])}))}}},m=null;return"undefined"!=typeof window?m=window.Vue:"undefined"!=typeof global&&(m=global.Vue),m&&m.use(b),e.RequestProvider=h,e.default=b,e}({},swal,get,camelCase,isObject,snakeCase);
1
+ var SHOW=function(e,t,r,o,n,i,s,a){"use strict";r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r,o=o&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n,i=i&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i,s=s&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s,a=a&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a;var u=function(e){return Array.isArray(e)},c=function(e){if(u(e))return e.map((function(e){return i(e)||u(e)?c(e):e}));var t={};return Object.keys(e).forEach((function(r){i(e[r])||u(e[r])?t[n(r)]=c(e[r]):t[n(r)]=e[r]})),t},d=function(e){return Array.isArray(e)},l=function(e){if(d(e))return e.map((function(e){return i(e)||d(e)?l(e):e}));var t={};return Object.keys(e).forEach((function(r){i(e[r])||d(e[r])?t[s(r)]=l(e[r]):t[s(r)]=e[r]})),t};function f(e){void 0===e&&(e=8);for(var t="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",o=r.length,n=0;n<e;n+=1)t+=r.charAt(Math.floor(Math.random()*o));return t}function v(e,t){void 0===t&&(t="Não conseguimos processar sua requisição. Tente novamente.");var r=o(e,"errors",!1);return r&&r[Object.keys(r)[0]][0]||t}var h={title:"Informações salvas com sucesso!",icon:"success",text:"",showCloseButton:!0,confirmButtonText:"Ok"},p={icon:"error",title:"Erro",text:"mensagem de error",showCancelButton:!0,showConfirmButton:!1,cancelButtonText:"Fechar"};function b(e,t,r,o,n,i,s,a,u,c){"boolean"!=typeof s&&(u=a,a=s,s=!1);var d,l="function"==typeof r?r.options:r;if(e&&e.render&&(l.render=e.render,l.staticRenderFns=e.staticRenderFns,l._compiled=!0,n&&(l.functional=!0)),o&&(l._scopeId=o),i?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,u(e)),e&&e._registeredComponents&&e._registeredComponents.add(i)},l._ssrRegister=d):t&&(d=s?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,a(e))}),d)if(l.functional){var f=l.render;l.render=function(e,t){return d.call(t),f(e,t)}}else{var v=l.beforeCreate;l.beforeCreate=v?[].concat(v,d):[d]}return r}var y=b({},void 0,{inject:["$_requestObserver"],emits:["success","error","success-feedback-ok","error-feedback-ok","success-feedback-cancel","error-feedback-cancel"],props:{vid:{type:String,default:function(){return f()}},tag:{type:String,default:"div"},service:{type:Function,required:!0},payload:{type:Object,default:function(){return{}}},payloadResolver:{type:Function,default:function(e){return l(e)}},dataResolver:{type:Function,default:function(e){return c(e)}},successSwalConfig:{type:Object,default:function(){return h}},errorSwalConfig:{type:Object,default:function(){return p}},errorFeedbackResolver:{type:Function,default:null},successFeedbackResolver:{type:Function,default:null},showSuccessFeedback:{type:Boolean,default:!1},hideErrorFeedback:{type:Boolean,default:!1},immediate:{type:Boolean,default:!1},forceResetError:{type:Boolean,default:!1},initialData:{default:null}},data:function(){return{loading:!1,failed:!1,succeeded:!1,error:null,data:this.initialData}},computed:{requestState:function(){return{loading:this.loading,failed:this.failed,succeeded:this.succeeded,error:this.error,data:this.data}}},watch:{forceResetError:function(e){e&&(this.error=null)}},mounted:function(){this.immediate&&this.action()},created:function(){this.$_requestObserver&&this.$_requestObserver.subscribe(this)},beforeDestroy:function(){this.$_requestObserver&&this.$_requestObserver.unsubscribe(this)},methods:{action:function(e){var t=this;this.startRequest();var n=e||this.payload;this.service(this.payloadResolver(n)).then((function(e){var o=e.data;if(t.data=t.dataResolver(o),t.succeeded=!0,t.$emit("success",t.data),t.showSuccessFeedback){if(t.successFeedbackResolver)return void t.successFeedbackResolver({vm:t,data:t.data});r.fire(Object.assign({},h,t.successSwalConfig)).then((function(){t.$emit("success-feedback-ok",t.data)}))}})).catch((function(e){if(t.failed=!0,t.error=e,t.$emit("error",e),!t.hideErrorFeedback){var n=v(o(e,"response.data",null),"Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.");if(t.errorFeedbackResolver)return void t.errorFeedbackResolver({vm:t,error:e,errorMessage:n});r.fire(Object.assign({},p,t.errorSwalConfig,{text:n})).then((function(r){r.isDismissed&&t.$emit("error-feedback-cancel",e),r.isConfirmed&&t.$emit("error-feedback-ok",e)}))}})).finally((function(){t.loading=!1}))},loadingTextResolver:function(e,t){return void 0===t&&(t="Carregando..."),this.loading?t:e},startRequest:function(){this.loading=!0,this.failed=!1,this.succeeded=!1,this.error=null}},render:function(){var e=this.$slots.default(Object.assign({},this.requestState,{action:this.action,loadingTextResolver:this.loadingTextResolver,errorMessage:v(o(this.error,"response.data",null),"Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.")}));return t.h(this.tag,e)}},void 0,void 0,void 0,!1,void 0,void 0,void 0),m=function(e,t,r,o){return void 0===r&&(r="||"),void 0===o&&(o=!1),e.reduce((function(e,o){return"||"===r?e||o[t]:"&&"===r?e&&o[t]:void 0}),o)},g=b({},void 0,{emits:["success","error"],props:{vid:{type:String,default:function(){return f()}},tag:{type:String,default:"div"}},data:function(){return{providers:[],providersVids:{}}},provide:function(){return{$_requestObserver:this}},computed:{context:function(){return{vid:this.vid,loading:m(this.providers,"loading"),failed:m(this.providers,"failed"),succeeded:m(this.providers,"succeeded","&&",!0),errors:a(this.providers.filter((function(e){return e.failed})).map((function(e){return{error:e.error,vid:e.vid}})),"vid"),providerRequestState:this.providerRequestState,loadingTextResolver:this.loadingTextResolver}},providerRequestState:function(){var e=this;return function(t){var r=e.providers.find((function(e){return e.vid===t}));return r?r.requestState:{loading:!1,failed:!1,succeeded:!1,error:null,data:null}}},loadingTextResolver:function(){var e=this;return function(t,r){return void 0===r&&(r="Carregando..."),e.context.loading?r:t}}},watch:{"context.succeeded":{handler:function(e){e&&this.$emit("success",this.context)}},"context.failed":{handler:function(e){e&&this.$emit("error",this.context)}}},render:function(){var e=this.$slots.default(this.context);return t.h(this.tag,e)},methods:{subscribe:function(e){if(this.providersVids[e.vid])throw new Error("Provider não reigistrado no observer! Já existe um provider com o vid >> "+e.vid+" <<");this.providersVids[e.vid]=!0,this.providers.push(e)},unsubscribe:function(e){delete this.providersVids[e.vid],this.providers.filter((function(t){return t.vid!==e.vid}))}}},void 0,void 0,void 0,!1,void 0,void 0,void 0),O=Object.freeze({__proto__:null,RequestProvider:y,RequestObserver:g});var R={$showConvertKeysToCamelCase:c,$showConvertKeysToSnakeCase:l,$showRemoveAccents:function(e){void 0===e&&(e="");for(var t,r=e.length,o=e.split(""),n=0;n<r;n+=1)-1!==(t="ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž".indexOf(e[n]))&&(o[n]="AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz"[t]);return o=(o=(o=(o=o.join("")).split(".").join("")).split("-").join("")).split("/").join("")},$showGenerateKey:f};var w={install:function e(t){if(!e.installed){e.installed=!0;var r=Number(t.version.split(".")[0]);if(r<=2)throw new Error("Essa versão só é compatível com projetos que possuem o Vue 3. Para projetos com a Vue 2, utilize a versão 0.3.0 ou inferior");r>2&&Object.keys(R).forEach((function(e){t.config.globalProperties[e]=R[e]})),Object.keys(O).forEach((function(e){t.component("Show"+e,O[e])}))}}},k=null;return"undefined"!=typeof window?k=window.Vue:"undefined"!=typeof global&&(k=global.Vue),k&&k.use(w),e.RequestObserver=g,e.RequestProvider=y,e.default=w,e}({},vue,swal,get,camelCase,isObject,snakeCase,keyBy);
@@ -1,4 +1,4 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var swal=_interopDefault(require('sweetalert2')),get=_interopDefault(require('lodash.get')),camelCase=_interopDefault(require('lodash.camelcase')),isObject=_interopDefault(require('lodash.isobject')),snakeCase=_interopDefault(require('lodash.snakecase'));var isArray = function (arg) { return Array.isArray(arg); };
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});function _interopDefault(e){return(e&&(typeof e==='object')&&'default'in e)?e['default']:e}var vue=require('vue'),swal=_interopDefault(require('sweetalert2')),get=_interopDefault(require('lodash.get')),camelCase=_interopDefault(require('lodash.camelcase')),isObject=_interopDefault(require('lodash.isobject')),snakeCase=_interopDefault(require('lodash.snakecase')),keyBy=_interopDefault(require('lodash.keyby'));var isArray = function (arg) { return Array.isArray(arg); };
2
2
 
3
3
  var convertKeysToCamelCase = function (data) {
4
4
  if (isArray(data)) {
@@ -40,7 +40,17 @@ var convertKeysToSnakeCase = function (data) {
40
40
  });
41
41
 
42
42
  return newData;
43
- };function getFirstErrorMessage(response, fallbackMsg) {
43
+ };function generateKey(length) {
44
+ if ( length === void 0 ) length = 8;
45
+
46
+ var result = '';
47
+ var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
48
+ var charactersLength = characters.length;
49
+ for (var i = 0; i < length; i += 1) {
50
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
51
+ }
52
+ return result;
53
+ }function getFirstErrorMessage(response, fallbackMsg) {
44
54
  if ( fallbackMsg === void 0 ) fallbackMsg = 'Não conseguimos processar sua requisição. Tente novamente.';
45
55
 
46
56
  var errors = get(response, 'errors', false);
@@ -66,7 +76,17 @@ var ERROR_SWAL_DEFAULT_CONFIG = {
66
76
  };
67
77
 
68
78
  var script = {
79
+ inject: ['$_requestObserver'],
80
+ emits: ['success', 'error', 'success-feedback-ok', 'error-feedback-ok', 'success-feedback-cancel', 'error-feedback-cancel'],
69
81
  props: {
82
+ vid: {
83
+ type: String,
84
+ default: function () { return generateKey(); },
85
+ },
86
+ tag: {
87
+ type: String,
88
+ default: 'div',
89
+ },
70
90
  service: {
71
91
  type: Function,
72
92
  required: true,
@@ -130,6 +150,18 @@ var script = {
130
150
  };
131
151
  },
132
152
 
153
+ computed: {
154
+ requestState: function requestState() {
155
+ return {
156
+ loading: this.loading,
157
+ failed: this.failed,
158
+ succeeded: this.succeeded,
159
+ error: this.error,
160
+ data: this.data,
161
+ };
162
+ }
163
+ },
164
+
133
165
  watch: {
134
166
  forceResetError: function forceResetError(newValue) {
135
167
  if (newValue) {
@@ -144,6 +176,18 @@ var script = {
144
176
  }
145
177
  },
146
178
 
179
+ created: function created() {
180
+ if(this.$_requestObserver) {
181
+ this.$_requestObserver.subscribe(this);
182
+ }
183
+ },
184
+
185
+ beforeDestroy: function beforeDestroy() {
186
+ if(this.$_requestObserver) {
187
+ this.$_requestObserver.unsubscribe(this);
188
+ }
189
+ },
190
+
147
191
  methods: {
148
192
  action: function action(payloadFromArgs) {
149
193
  var this$1 = this;
@@ -204,7 +248,7 @@ var script = {
204
248
  });
205
249
  },
206
250
 
207
- labelHelper: function labelHelper(label, loadingLabel) {
251
+ loadingTextResolver: function loadingTextResolver(label, loadingLabel) {
208
252
  if ( loadingLabel === void 0 ) loadingLabel = 'Carregando...';
209
253
 
210
254
  if (this.loading) {
@@ -222,22 +266,16 @@ var script = {
222
266
  },
223
267
 
224
268
  render: function render() {
225
- var slotProvider = this.$slots || this.$scopedSlots;
226
- var slot = slotProvider.default({
227
- loading: this.loading,
228
- failed: this.failed,
229
- succeeded: this.succeeded,
230
- error: this.error,
231
- data: this.data,
232
- action: this.action,
233
- labelHelper: this.labelHelper,
269
+ var slotProvider = this.$slots;
270
+ var slot = slotProvider.default(Object.assign({}, this.requestState,
271
+ {action: this.action,
272
+ loadingTextResolver: this.loadingTextResolver,
234
273
  errorMessage: getFirstErrorMessage(
235
274
  get(this.error, 'response.data', null),
236
275
  'Um erro aconteceu... por favor, tente novamente. Se o erro persistir, contate o suporte.'
237
- ),
238
- });
276
+ )}));
239
277
 
240
- return Array.isArray(slot) ? slot[0] : slot;
278
+ return vue.h(this.tag, slot);
241
279
  },
242
280
  };function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
243
281
  if (typeof shadowMode !== 'boolean') {
@@ -322,7 +360,7 @@ var __vue_script__ = script;
322
360
  /* scoped */
323
361
  var __vue_scope_id__ = undefined;
324
362
  /* module identifier */
325
- var __vue_module_identifier__ = "data-v-58d9f362";
363
+ var __vue_module_identifier__ = "data-v-77657dd0";
326
364
  /* functional template */
327
365
  var __vue_is_functional_template__ = undefined;
328
366
  /* style inject */
@@ -344,7 +382,172 @@ var __vue_script__ = script;
344
382
  undefined,
345
383
  undefined,
346
384
  undefined
347
- );var components=/*#__PURE__*/Object.freeze({__proto__:null,RequestProvider: __vue_component__});function removeAccents(str) {
385
+ );var booleanReduceByProp = function (arr, prop, operator, defaultValue) {
386
+ if ( operator === void 0 ) operator = '||';
387
+ if ( defaultValue === void 0 ) defaultValue = false;
388
+
389
+ return arr.reduce(function (acc, item) {
390
+ if(operator === '||') {
391
+ return acc || item[prop];
392
+ } else if(operator === '&&') {
393
+ return acc && item[prop];
394
+ }
395
+ }, defaultValue);
396
+ };
397
+
398
+ var script$1 = {
399
+ emits: ['success', 'error'],
400
+ props: {
401
+ vid: {
402
+ type: String,
403
+ default: function () { return generateKey(); },
404
+ },
405
+ tag: {
406
+ type: String,
407
+ default: 'div',
408
+ },
409
+ },
410
+ data: function data() {
411
+ return {
412
+ providers: [],
413
+ providersVids: {},
414
+ };
415
+ },
416
+ provide: function provide() {
417
+ return {
418
+ $_requestObserver: this,
419
+ }
420
+ },
421
+
422
+ computed: {
423
+ context: function context() {
424
+ return {
425
+ vid: this.vid,
426
+ loading: booleanReduceByProp(this.providers, 'loading'),
427
+ failed: booleanReduceByProp(this.providers, 'failed'),
428
+ succeeded: booleanReduceByProp(this.providers, 'succeeded', '&&', true),
429
+ errors: keyBy(this.providers.filter(function (ref) {
430
+ var failed = ref.failed;
431
+
432
+ return failed;
433
+ }).map(function (ref) {
434
+ var error = ref.error;
435
+ var vid = ref.vid;
436
+
437
+ return ({ error: error, vid: vid });
438
+ }), 'vid'),
439
+ providerRequestState: this.providerRequestState,
440
+ loadingTextResolver: this.loadingTextResolver,
441
+ };
442
+ },
443
+
444
+ providerRequestState: function providerRequestState() {
445
+ var this$1 = this;
446
+
447
+ return function (vid) {
448
+ var element = this$1.providers.find(function (ref) {
449
+ var providerVid = ref.vid;
450
+
451
+ return providerVid === vid;
452
+ });
453
+ return element ? element.requestState : {
454
+ loading: false,
455
+ failed: false,
456
+ succeeded: false,
457
+ error: null,
458
+ data: null,
459
+ };
460
+ }
461
+ },
462
+
463
+ loadingTextResolver: function loadingTextResolver() {
464
+ var this$1 = this;
465
+
466
+ return function (label, loadingLabel) {
467
+ if ( loadingLabel === void 0 ) loadingLabel = 'Carregando...';
468
+
469
+ if (this$1.context.loading) {
470
+ return loadingLabel;
471
+ }
472
+ return label;
473
+ }
474
+ },
475
+ },
476
+
477
+ watch: {
478
+ 'context.succeeded': {
479
+ handler: function handler(newValue) {
480
+ if (newValue) {
481
+ this.$emit('success', this.context);
482
+ }
483
+ },
484
+ },
485
+ 'context.failed': {
486
+ handler: function handler(newValue) {
487
+ if (newValue) {
488
+ this.$emit('error', this.context);
489
+ }
490
+ },
491
+ },
492
+ },
493
+
494
+ render: function render() {
495
+ var slotProvider = this.$slots;
496
+ var slot = slotProvider.default(this.context);
497
+ return vue.h(this.tag, slot);
498
+ },
499
+
500
+ methods: {
501
+ subscribe: function subscribe(provider) {
502
+ if(!this.providersVids[provider.vid]) {
503
+ this.providersVids[provider.vid] = true;
504
+ this.providers.push(provider);
505
+ } else {
506
+ throw new Error(("Provider não reigistrado no observer! Já existe um provider com o vid >> " + (provider.vid) + " <<"));
507
+ }
508
+ },
509
+ unsubscribe: function unsubscribe(provider) {
510
+ delete this.providersVids[provider.vid];
511
+ this.providers.filter(function (ref) {
512
+ var vid = ref.vid;
513
+
514
+ return vid !== provider.vid;
515
+ });
516
+ },
517
+ },
518
+ };/* script */
519
+ var __vue_script__$1 = script$1;
520
+
521
+ /* template */
522
+
523
+ /* style */
524
+ var __vue_inject_styles__$1 = undefined;
525
+ /* scoped */
526
+ var __vue_scope_id__$1 = undefined;
527
+ /* module identifier */
528
+ var __vue_module_identifier__$1 = "data-v-074e0922";
529
+ /* functional template */
530
+ var __vue_is_functional_template__$1 = undefined;
531
+ /* style inject */
532
+
533
+ /* style inject SSR */
534
+
535
+ /* style inject shadow dom */
536
+
537
+
538
+
539
+ var __vue_component__$1 = /*#__PURE__*/normalizeComponent(
540
+ {},
541
+ __vue_inject_styles__$1,
542
+ __vue_script__$1,
543
+ __vue_scope_id__$1,
544
+ __vue_is_functional_template__$1,
545
+ __vue_module_identifier__$1,
546
+ false,
547
+ undefined,
548
+ undefined,
549
+ undefined
550
+ );var components=/*#__PURE__*/Object.freeze({__proto__:null,RequestProvider: __vue_component__,RequestObserver: __vue_component__$1});function removeAccents(str) {
348
551
  if ( str === void 0 ) str = '';
349
552
 
350
553
  var accents = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž';
@@ -366,16 +569,6 @@ var __vue_script__ = script;
366
569
  newStr = newStr.split('/').join('');
367
570
 
368
571
  return newStr;
369
- }function generateKey(length) {
370
- if ( length === void 0 ) length = 8;
371
-
372
- var result = '';
373
- var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
374
- var charactersLength = characters.length;
375
- for (var i = 0; i < length; i += 1) {
376
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
377
- }
378
- return result;
379
572
  }var utils = {
380
573
  $showConvertKeysToCamelCase: convertKeysToCamelCase,
381
574
  $showConvertKeysToSnakeCase: convertKeysToSnakeCase,
@@ -392,9 +585,7 @@ function install(app) {
392
585
  var version = Number(app.version.split('.')[0]);
393
586
 
394
587
  if (version <= 2) {
395
- Object.keys(utils).forEach(function (key) {
396
- app.prototype[key] = utils[key];
397
- });
588
+ throw new Error('Essa versão só é compatível com projetos que possuem o Vue 3. Para projetos com a Vue 2, utilize a versão 0.3.0 ou inferior');
398
589
  }
399
590
 
400
591
  if (version > 2) {
@@ -429,4 +620,4 @@ if (typeof window !== 'undefined') {
429
620
 
430
621
  if (GlobalVue) {
431
622
  GlobalVue.use(plugin);
432
- }exports.RequestProvider=__vue_component__;exports.default=plugin;
623
+ }exports.RequestObserver=__vue_component__$1;exports.RequestProvider=__vue_component__;exports.default=plugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sysvale/show",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "A set of components used at Sysvale",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,6 +29,7 @@
29
29
  "lodash.camelcase": "^4.3.0",
30
30
  "lodash.get": "^4.4.2",
31
31
  "lodash.isobject": "^3.0.2",
32
+ "lodash.keyby": "^4.6.0",
32
33
  "lodash.snakecase": "^4.1.1",
33
34
  "sweetalert2": "^11.3.5",
34
35
  "vue": "^2.6.12"