matestack-ui-core 0.7.5 → 0.7.6

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/concepts/matestack/ui/core/action/action.js +120 -39
  3. data/app/concepts/matestack/ui/core/action/action.rb +21 -0
  4. data/app/concepts/matestack/ui/core/app/app.js +3 -3
  5. data/app/concepts/matestack/ui/core/app/app.rb +1 -0
  6. data/app/concepts/matestack/ui/core/app/store.js +1 -1
  7. data/app/concepts/matestack/ui/core/async/async.js +25 -3
  8. data/app/concepts/matestack/ui/core/form/form.js +245 -116
  9. data/app/concepts/matestack/ui/core/form/form.rb +22 -0
  10. data/app/concepts/matestack/ui/core/form/input/input.haml +9 -1
  11. data/app/concepts/matestack/ui/core/form/input/input.rb +2 -2
  12. data/app/concepts/matestack/ui/core/form/select/select.haml +14 -10
  13. data/app/concepts/matestack/ui/core/form/select/select.rb +10 -0
  14. data/app/concepts/matestack/ui/core/page/page.rb +5 -1
  15. data/app/concepts/matestack/ui/core/transition/transition.js +16 -1
  16. data/app/concepts/matestack/ui/core/transition/transition.rb +1 -1
  17. data/app/helpers/matestack/ui/core/application_helper.rb +2 -1
  18. data/lib/matestack/ui/core/version.rb +1 -1
  19. data/vendor/assets/javascripts/dist/manifest.json +6 -10
  20. data/vendor/assets/javascripts/dist/matestack-ui-core.js +406 -158
  21. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  22. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  23. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  24. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  25. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  26. metadata +4 -6
  27. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  28. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b08e2fe0f19b178aa377ca1cac852e56f5faee7abdf5ec08f0738c1c11c5b59
4
- data.tar.gz: b79c9bc5a5609a50b274a83103c23bc659cca9ae582b49c931b34c2921f723f0
3
+ metadata.gz: 1c4bb181fa03aec3eb151af547eec43d6f12f692c8cdfa0dfe70a6e963ede262
4
+ data.tar.gz: 24088d7379448e215604593de26c89d8a026bbef1054c7d3cb78e22f01803f22
5
5
  SHA512:
6
- metadata.gz: 668b12bb85128ca1cd306e256fa8e75159f1e1f62edc7af46807fcb2537ea090ac9aeafab3fddfc5f437e76dfcb522c3db4fb01997165795811770e0d16b216d
7
- data.tar.gz: 1bac122005918a5c46b5526e3d619ddf9fd1371e15b664e6c5c64293656d1f2c9706f5fbbfb369eb355e875fe38f2e4f68f9165dc788661aa41ae0f1ac47a72c
6
+ metadata.gz: ee17b5c4423b505a5a6dacb837fe44987ce8fc26f1569314d7b7afbcdcb1c0feaadbf436ccf901583b94e9d1161f81ba99a6cab6237f48cd5854b685685fb1ca
7
+ data.tar.gz: 677a09c88813b82d2c2cbf32885f90845b0e3a24739c1fd3ebe0b371b8a2e2208df7a3b0cdb9d8b83368eb34480edc769250cc932dc5fb6c645a2de0896ce007
@@ -17,51 +17,132 @@ const componentDef = {
17
17
  (self.componentConfig["confirm"] == undefined) || confirm(self.componentConfig["confirm_text"])
18
18
  )
19
19
  {
20
- axios({
20
+ if (self.componentConfig["emit"] != undefined) {
21
+ matestackEventHub.$emit(self.componentConfig["emit"]);
22
+ }
23
+ if (self.componentConfig["delay"] != undefined) {
24
+ setTimeout(function () {
25
+ self.sendRequest()
26
+ }, parseInt(self.componentConfig["delay"]));
27
+ } else {
28
+ this.sendRequest()
29
+ }
30
+ }
31
+ },
32
+ sendRequest: function(){
33
+ const self = this
34
+ axios({
21
35
  method: self.componentConfig["method"],
22
36
  url: self.componentConfig["action_path"],
23
37
  data: self.componentConfig["data"],
24
38
  headers: {
25
39
  'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
26
40
  }
27
- })
28
- .then(function(response){
29
- if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
30
- matestackEventHub.$emit(self.componentConfig["success"]["emit"], response.data);
31
- }
32
- if (self.componentConfig["success"] != undefined
33
- && self.componentConfig["success"]["transition"] != undefined
34
- && (
35
- self.componentConfig["success"]["transition"]["follow_response"] == undefined
36
- ||
37
- self.componentConfig["success"]["transition"]["follow_response"] === false
38
- )
39
- && self.$store != undefined
40
- ) {
41
- let path = self.componentConfig["success"]["transition"]["path"]
42
- self.$store.dispatch('navigateTo', {url: path, backwards: false})
43
- return;
44
- }
45
- if (self.componentConfig["success"] != undefined
46
- && self.componentConfig["success"]["transition"] != undefined
47
- && self.componentConfig["success"]["transition"]["follow_response"] === true
48
- && self.$store != undefined
49
- ) {
50
- let path = response.data["transition_to"] || response.request.responseURL;
51
- self.$store.dispatch('navigateTo', {url: path, backwards: false});
52
- return;
53
- }
54
- })
55
- .catch(function(error){
56
- if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["emit"] != undefined) {
57
- matestackEventHub.$emit(self.componentConfig["failure"]["emit"], error.response.data);
58
- }
59
- if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["transition"] != undefined && self.$store != undefined) {
60
- let path = self.componentConfig["failure"]["transition"]["path"]
61
- self.$store.dispatch('navigateTo', {url: path, backwards: false})
62
- }
63
- })
64
- }
41
+ }
42
+ )
43
+ .then(function(response){
44
+ if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
45
+ matestackEventHub.$emit(self.componentConfig["success"]["emit"], response.data);
46
+ }
47
+
48
+ // transition handling
49
+ if (self.componentConfig["success"] != undefined
50
+ && self.componentConfig["success"]["transition"] != undefined
51
+ && (
52
+ self.componentConfig["success"]["transition"]["follow_response"] == undefined
53
+ ||
54
+ self.componentConfig["success"]["transition"]["follow_response"] === false
55
+ )
56
+ && self.$store != undefined
57
+ ) {
58
+ let path = self.componentConfig["success"]["transition"]["path"]
59
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
60
+ return;
61
+ }
62
+ if (self.componentConfig["success"] != undefined
63
+ && self.componentConfig["success"]["transition"] != undefined
64
+ && self.componentConfig["success"]["transition"]["follow_response"] === true
65
+ && self.$store != undefined
66
+ ) {
67
+ let path = response.data["transition_to"] || response.request.responseURL
68
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
69
+ return;
70
+ }
71
+ // redirect handling
72
+ if (self.componentConfig["success"] != undefined
73
+ && self.componentConfig["success"]["redirect"] != undefined
74
+ && (
75
+ self.componentConfig["success"]["redirect"]["follow_response"] == undefined
76
+ ||
77
+ self.componentConfig["success"]["redirect"]["follow_response"] === false
78
+ )
79
+ && self.$store != undefined
80
+ ) {
81
+ let path = self.componentConfig["success"]["redirect"]["path"]
82
+ window.location.href = path
83
+ return;
84
+ }
85
+ if (self.componentConfig["success"] != undefined
86
+ && self.componentConfig["success"]["redirect"] != undefined
87
+ && self.componentConfig["success"]["redirect"]["follow_response"] === true
88
+ && self.$store != undefined
89
+ ) {
90
+ let path = response.data["redirect_to"] || response.request.responseURL
91
+ window.location.href = path
92
+ return;
93
+ }
94
+ })
95
+ .catch(function(error){
96
+ if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["emit"] != undefined) {
97
+ matestackEventHub.$emit(self.componentConfig["failure"]["emit"], error.response.data);
98
+ }
99
+ // transition handling
100
+ if (self.componentConfig["failure"] != undefined
101
+ && self.componentConfig["failure"]["transition"] != undefined
102
+ && (
103
+ self.componentConfig["failure"]["transition"]["follow_response"] == undefined
104
+ ||
105
+ self.componentConfig["failure"]["transition"]["follow_response"] === false
106
+ )
107
+ && self.$store != undefined
108
+ ) {
109
+ let path = self.componentConfig["failure"]["transition"]["path"]
110
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
111
+ return;
112
+ }
113
+ if (self.componentConfig["failure"] != undefined
114
+ && self.componentConfig["failure"]["transition"] != undefined
115
+ && self.componentConfig["failure"]["transition"]["follow_response"] === true
116
+ && self.$store != undefined
117
+ ) {
118
+ let path = error.response.data["transition_to"] || response.request.responseURL
119
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
120
+ return;
121
+ }
122
+ // redirect handling
123
+ if (self.componentConfig["failure"] != undefined
124
+ && self.componentConfig["failure"]["redirect"] != undefined
125
+ && (
126
+ self.componentConfig["failure"]["redirect"]["follow_response"] == undefined
127
+ ||
128
+ self.componentConfig["failure"]["redirect"]["follow_response"] === false
129
+ )
130
+ && self.$store != undefined
131
+ ) {
132
+ let path = self.componentConfig["failure"]["redirect"]["path"]
133
+ window.location.href = path
134
+ return;
135
+ }
136
+ if (self.componentConfig["failure"] != undefined
137
+ && self.componentConfig["failure"]["redirect"] != undefined
138
+ && self.componentConfig["failure"]["redirect"]["follow_response"] === true
139
+ && self.$store != undefined
140
+ ) {
141
+ let path = error.response.data["redirect_to"] || response.request.responseURL
142
+ window.location.href = path
143
+ return;
144
+ }
145
+ })
65
146
  }
66
147
  }
67
148
  }
@@ -9,12 +9,18 @@ module Matestack::Ui::Core::Action
9
9
  unless options[:success][:transition].nil?
10
10
  @component_config[:success][:transition][:path] = transition_path options[:success]
11
11
  end
12
+ unless options[:success][:redirect].nil?
13
+ @component_config[:success][:redirect][:path] = redirect_path options[:success]
14
+ end
12
15
  end
13
16
  @component_config[:failure] = options[:failure]
14
17
  unless options[:failure].nil?
15
18
  unless options[:failure][:transition].nil?
16
19
  @component_config[:failure][:transition][:path] = transition_path options[:failure]
17
20
  end
21
+ unless options[:failure][:redirect].nil?
22
+ @component_config[:failure][:redirect][:path] = redirect_path options[:failure]
23
+ end
18
24
  end
19
25
  if options[:notify].nil?
20
26
  @component_config[:notify] = true
@@ -51,5 +57,20 @@ module Matestack::Ui::Core::Action
51
57
  end
52
58
  end
53
59
 
60
+ def redirect_path callback_options
61
+ begin
62
+ if callback_options[:redirect][:path].is_a?(Symbol)
63
+ return ::Rails.application.routes.url_helpers.send(
64
+ callback_options[:redirect][:path],
65
+ callback_options[:redirect][:params]
66
+ )
67
+ else
68
+ return callback_options[:redirect][:path]
69
+ end
70
+ rescue
71
+ raise "Redirect path not found"
72
+ end
73
+ end
74
+
54
75
  end
55
76
  end
@@ -16,15 +16,15 @@ const componentDef = {
16
16
  }),
17
17
  mounted: function(){
18
18
  const self = this;
19
- window.onpopstate = (event) => {
19
+ window.addEventListener("popstate", (event) => {
20
20
  if (isNavigatingToAnotherPage({
21
21
  origin: self.currentOrigin,
22
22
  pathName: self.currentPathName,
23
23
  search: self.currentSearch
24
24
  }, document.location)){
25
- self.$store.dispatch("navigateTo", {url: document.location.pathname, backwards: true} );
25
+ self.$store.dispatch("navigateTo", { url: document.location.pathname + document.location.search, backwards: true } );
26
26
  }
27
- }
27
+ })
28
28
  },
29
29
  components: {
30
30
  VRuntimeTemplate: VRuntimeTemplate
@@ -4,6 +4,7 @@ module Matestack::Ui::Core::App
4
4
  include Matestack::Ui::Core::Cell
5
5
  include Matestack::Ui::Core::ApplicationHelper
6
6
  include Matestack::Ui::Core::ToCell
7
+ include Matestack::Ui::Core::HasViewContext
7
8
 
8
9
  view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
9
10
 
@@ -53,7 +53,7 @@ const store = new Vuex.Store({
53
53
  setTimeout(function () {
54
54
  resolve(response["data"])
55
55
  commit('setPageTemplate', response["data"])
56
- commit('setCurrentLocation', { path: url, search: document.location.search, origin: document.location.origin })
56
+ commit('setCurrentLocation', { path: url.split("?")[0], search: document.location.search, origin: document.location.origin })
57
57
  matestackEventHub.$emit("page_loaded", url);
58
58
  if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
59
59
  matestackUiCoreTransitionSuccess(url);
@@ -45,9 +45,19 @@ const componentDef = {
45
45
  },
46
46
  created: function () {
47
47
  const self = this
48
- matestackEventHub.$on(this.componentConfig["rerender_on"], self.rerender)
49
- matestackEventHub.$on(this.componentConfig["show_on"], self.show)
50
- matestackEventHub.$on(this.componentConfig["hide_on"], self.hide)
48
+ if(this.componentConfig["show_on"] != undefined){
49
+ this.showing = false
50
+ var show_events = this.componentConfig["show_on"].split(",")
51
+ show_events.forEach(show_event => matestackEventHub.$on(show_event.trim(), self.show));
52
+ }
53
+ if(this.componentConfig["hide_on"] != undefined){
54
+ var hide_events = this.componentConfig["hide_on"].split(",")
55
+ hide_events.forEach(hide_event => matestackEventHub.$on(hide_event.trim(), self.hide));
56
+ }
57
+ if(this.componentConfig["rerender_on"] != undefined){
58
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
59
+ rerender_events.forEach(rerender_event => matestackEventHub.$on(rerender_event.trim(), self.rerender));
60
+ }
51
61
  if(this.componentConfig["show_on"] != undefined){
52
62
  this.showing = false
53
63
  }
@@ -68,6 +78,18 @@ const componentDef = {
68
78
  matestackEventHub.$off(this.componentConfig["rerender_on"], self.rerender);
69
79
  matestackEventHub.$off(this.componentConfig["show_on"], self.show);
70
80
  matestackEventHub.$off(this.componentConfig["hide_on"], self.hide);
81
+ if(this.componentConfig["show_on"] != undefined){
82
+ var shown_events = this.componentConfig["show_on"].split(",")
83
+ shown_events.forEach(show_event => matestackEventHub.$off(show_event.trim(), self.show));
84
+ }
85
+ if(this.componentConfig["hide_on"] != undefined){
86
+ var hiden_events = this.componentConfig["hide_on"].split(",")
87
+ hiden_events.forEach(hide_event => matestackEventHub.$off(hide_event.trim(), self.hide));
88
+ }
89
+ if(this.componentConfig["rerender_on"] != undefined){
90
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
91
+ rerender_events.forEach(rerender_event => matestackEventHub.$off(rerender_event.trim(), self.rerender));
92
+ }
71
93
  },
72
94
  }
73
95
 
@@ -1,35 +1,35 @@
1
- import Vue from 'vue/dist/vue.esm'
2
- import Vuex from 'vuex'
3
- import axios from 'axios'
1
+ import Vue from "vue/dist/vue.esm";
2
+ import Vuex from "vuex";
3
+ import axios from "axios";
4
4
 
5
- import matestackEventHub from '../js/event-hub'
6
- import componentMixin from '../component/component'
5
+ import matestackEventHub from "../js/event-hub";
6
+ import componentMixin from "../component/component";
7
7
 
8
8
  const componentDef = {
9
9
  mixins: [componentMixin],
10
- data: function(){
10
+ data: function () {
11
11
  return {
12
12
  data: {},
13
13
  showInlineForm: false,
14
- errors: {}
15
- }
14
+ errors: {},
15
+ };
16
16
  },
17
17
  methods: {
18
- initDataKey: function(key, initValue){
18
+ initDataKey: function (key, initValue) {
19
19
  this.data[key] = initValue;
20
20
  },
21
- inputChanged: function(key){
22
- this.resetErrors(key)
21
+ inputChanged: function (key) {
22
+ this.resetErrors(key);
23
23
  },
24
- updateFormValue: function(key, value){
24
+ updateFormValue: function (key, value) {
25
25
  this.data[key] = value;
26
26
  },
27
- resetErrors: function(key){
28
- if (this.errors[key]){
27
+ resetErrors: function (key) {
28
+ if (this.errors[key]) {
29
29
  this.errors[key] = null;
30
30
  }
31
31
  },
32
- launchInlineForm: function(key, value){
32
+ launchInlineForm: function (key, value) {
33
33
  this.showInlineForm = true;
34
34
  this.data[key] = value;
35
35
  const self = this;
@@ -37,136 +37,265 @@ const componentDef = {
37
37
  self.$refs.inlineinput.focus();
38
38
  }, 300);
39
39
  },
40
- closeInlineForm: function(){
40
+ closeInlineForm: function () {
41
41
  this.showInlineForm = false;
42
42
  },
43
- setProps: function(flat, newVal){
44
- for(var i in flat){
45
- if((typeof flat[i] === "object") && !(flat[i] instanceof Array)){
46
- setProps(flat[i], newVal);
47
- return;
48
- } else {
49
- flat[i] = newVal;
50
- }
43
+ setProps: function (flat, newVal) {
44
+ for (var i in flat) {
45
+ if (flat[i] === null){
46
+ flat[i] = newVal;
47
+ } else if (flat[i] instanceof File){
48
+ flat[i] = newVal;
49
+ this.$refs["input."+i].value = newVal
50
+ } else if (flat[i] instanceof Array) {
51
+ if(flat[i][0] instanceof File){
52
+ flat[i] = newVal
53
+ this.$refs["input."+i].value = newVal
54
+ }
55
+ } else if (typeof flat[i] === "object" && !(flat[i] instanceof Array)) {
56
+ setProps(flat[i], newVal);
57
+ } else {
58
+ flat[i] = newVal;
59
+ }
51
60
  }
52
61
  },
53
- initValues: function(){
62
+ filesAdded: function (key) {
63
+ const dataTransfer = event.dataTransfer || event.target;
64
+ const files = dataTransfer.files;
65
+ if (event.target.attributes.multiple) {
66
+ this.data[key] = [];
67
+ for (let index in files) {
68
+ if (files[index] instanceof File) {
69
+ this.data[key].push(files[index]);
70
+ }
71
+ }
72
+ } else {
73
+ this.data[key] = files[0];
74
+ }
75
+ },
76
+ initValues: function () {
54
77
  let self = this;
55
- let data = {}
78
+ let data = {};
56
79
  for (let key in self.$refs) {
57
- let initValue = self.$refs[key]["attributes"]["init-value"]
58
- let valueType = self.$refs[key]["attributes"]["value-type"]
80
+ let initValue = self.$refs[key]["attributes"]["init-value"];
81
+ let valueType = self.$refs[key]["attributes"]["value-type"];
59
82
 
60
- if (key.startsWith("input.")){
61
- if(initValue){
62
- data[key.replace('input.', '')] = initValue["value"]
63
- }else{
64
- data[key.replace('input.', '')] = null
83
+ if (key.startsWith("input.")) {
84
+ if (initValue) {
85
+ data[key.replace("input.", "")] = initValue["value"];
86
+ } else {
87
+ data[key.replace("input.", "")] = null;
65
88
  }
66
89
  }
67
- if (key.startsWith("select.")){
68
- if (key.startsWith("select.multiple.")){
69
- if(initValue){
70
- data[key.replace('select.multiple.', '')] = JSON.parse(initValue["value"])
71
- }else{
72
- data[key.replace('select.multiple.', '')] = []
90
+ if (key.startsWith("select.")) {
91
+ if (key.startsWith("select.multiple.")) {
92
+ if (initValue) {
93
+ data[key.replace("select.multiple.", "")] = JSON.parse(initValue["value"]);
94
+ } else {
95
+ data[key.replace("select.multiple.", "")] = [];
73
96
  }
74
- }else{
75
- if(initValue){
76
- if(valueType && valueType["value"] == "Integer")
77
- data[key.replace('select.', '')] = parseInt(initValue["value"])
78
- else{
79
- data[key.replace('select.', '')] = initValue["value"]
97
+ } else {
98
+ if (initValue) {
99
+ if (valueType && valueType["value"] == "Integer") data[key.replace("select.", "")] = parseInt(initValue["value"]);
100
+ else {
101
+ data[key.replace("select.", "")] = initValue["value"];
80
102
  }
81
- }else{
82
- data[key.replace('select.', '')] = null
103
+ } else {
104
+ data[key.replace("select.", "")] = null;
83
105
  }
84
106
  }
85
-
86
107
  }
87
108
  }
88
109
  self.data = data;
89
110
  },
90
111
  shouldResetFormOnSuccessfulSubmit() {
91
- const self = this
92
- if (self.componentConfig['success'] != undefined && self.componentConfig['success']['reset'] != undefined) {
93
- return self.componentConfig['success']['reset']
112
+ const self = this;
113
+ if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["reset"] != undefined) {
114
+ return self.componentConfig["success"]["reset"];
94
115
  } else {
95
- return self.shouldResetFormOnSuccessfulSubmitByDefault()
116
+ return self.shouldResetFormOnSuccessfulSubmitByDefault();
96
117
  }
97
118
  },
98
119
  shouldResetFormOnSuccessfulSubmitByDefault() {
99
- const self = this
120
+ const self = this;
100
121
  if (self.componentConfig["method"] == "put") {
101
- return false
122
+ return false;
102
123
  } else {
103
- return true
124
+ return true;
104
125
  }
105
126
  },
106
127
  perform: function(){
107
128
  const self = this
108
- let payload = {}
109
- payload[self.componentConfig["for"]] = self.data
110
- axios({
111
- method: self.componentConfig["method"],
112
- url: self.componentConfig["submit_path"],
113
- data: payload,
114
- headers: {
115
- 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
116
- }
117
- })
118
- .then(function(response){
119
- if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
120
- matestackEventHub.$emit(self.componentConfig["success"]["emit"], response.data);
121
- }
122
- if (self.componentConfig["success"] != undefined
123
- && self.componentConfig["success"]["transition"] != undefined
124
- && (
125
- self.componentConfig["success"]["transition"]["follow_response"] == undefined
126
- ||
127
- self.componentConfig["success"]["transition"]["follow_response"] === false
128
- )
129
- && self.$store != undefined
130
- ) {
131
- let path = self.componentConfig["success"]["transition"]["path"]
132
- self.$store.dispatch('navigateTo', {url: path, backwards: false})
133
- return;
134
- }
135
- if (self.componentConfig["success"] != undefined
136
- && self.componentConfig["success"]["transition"] != undefined
137
- && self.componentConfig["success"]["transition"]["follow_response"] === true
138
- && self.$store != undefined
139
- ) {
140
- let path = response.data["transition_to"] || response.request.responseURL
141
- self.$store.dispatch('navigateTo', {url: path, backwards: false})
142
- return;
143
- }
144
- if (self.shouldResetFormOnSuccessfulSubmit())
145
- {
146
- self.setProps(self.data, null);
147
- self.initValues();
148
- }
149
- self.showInlineForm = false;
150
- })
151
- .catch(function(error){
152
- if(error.response && error.response.data && error.response.data.errors){
153
- self.errors = error.response.data.errors;
154
- }
155
- if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["emit"] != undefined) {
156
- matestackEventHub.$emit(self.componentConfig["failure"]["emit"], error.response.data);
157
- }
158
- if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["transition"] != undefined && self.$store != undefined) {
159
- let path = self.componentConfig["failure"]["transition"]["path"]
160
- self.$store.dispatch('navigateTo', {url: path, backwards: false})
129
+ if (self.componentConfig["emit"] != undefined) {
130
+ matestackEventHub.$emit(self.componentConfig["emit"]);
131
+ }
132
+ if (self.componentConfig["delay"] != undefined) {
133
+ setTimeout(function () {
134
+ self.sendRequest()
135
+ }, parseInt(self.componentConfig["delay"]));
136
+ } else {
137
+ this.sendRequest()
138
+ }
139
+ },
140
+ sendRequest: function(){
141
+ const self = this;
142
+ let payload = {};
143
+ payload[self.componentConfig["for"]] = self.data;
144
+ let axios_config = {};
145
+ if (self.componentConfig["multipart"] == true ) {
146
+ let form_data = new FormData();
147
+ for (let key in self.data) {
148
+ if (key.endsWith("[]")) {
149
+ for (let i in self.data[key]) {
150
+ let file = self.data[key][i];
151
+ form_data.append(self.componentConfig["for"] + "[" + key.slice(0, -2) + "][]", file);
152
+ }
153
+ } else {
154
+ if (self.data[key] != null){
155
+ form_data.append(self.componentConfig["for"] + "[" + key + "]", self.data[key]);
156
+ }
157
+ }
161
158
  }
162
- })
163
- }
159
+ axios_config = {
160
+ method: self.componentConfig["method"],
161
+ url: self.componentConfig["submit_path"],
162
+ data: form_data,
163
+ headers: {
164
+ "X-CSRF-Token": document.getElementsByName("csrf-token")[0].getAttribute("content"),
165
+ "Content-Type": "multipart/form-data",
166
+ },
167
+ };
168
+ } else {
169
+ axios_config = {
170
+ method: self.componentConfig["method"],
171
+ url: self.componentConfig["submit_path"],
172
+ data: payload,
173
+ headers: {
174
+ "X-CSRF-Token": document.getElementsByName("csrf-token")[0].getAttribute("content"),
175
+ "Content-Type": "application/json",
176
+ },
177
+ };
178
+ }
179
+ axios(axios_config)
180
+ .then(function (response) {
181
+ if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
182
+ matestackEventHub.$emit(self.componentConfig["success"]["emit"], response.data);
183
+ }
184
+ // transition handling
185
+ if (self.componentConfig["success"] != undefined
186
+ && self.componentConfig["success"]["transition"] != undefined
187
+ && (
188
+ self.componentConfig["success"]["transition"]["follow_response"] == undefined
189
+ ||
190
+ self.componentConfig["success"]["transition"]["follow_response"] === false
191
+ )
192
+ && self.$store != undefined
193
+ ) {
194
+ let path = self.componentConfig["success"]["transition"]["path"]
195
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
196
+ return;
197
+ }
198
+ if (self.componentConfig["success"] != undefined
199
+ && self.componentConfig["success"]["transition"] != undefined
200
+ && self.componentConfig["success"]["transition"]["follow_response"] === true
201
+ && self.$store != undefined
202
+ ) {
203
+ let path = response.data["transition_to"] || response.request.responseURL
204
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
205
+ return;
206
+ }
207
+ // redirect handling
208
+ if (self.componentConfig["success"] != undefined
209
+ && self.componentConfig["success"]["redirect"] != undefined
210
+ && (
211
+ self.componentConfig["success"]["redirect"]["follow_response"] == undefined
212
+ ||
213
+ self.componentConfig["success"]["redirect"]["follow_response"] === false
214
+ )
215
+ && self.$store != undefined
216
+ ) {
217
+ let path = self.componentConfig["success"]["redirect"]["path"]
218
+ window.location.href = path
219
+ return;
220
+ }
221
+ if (self.componentConfig["success"] != undefined
222
+ && self.componentConfig["success"]["redirect"] != undefined
223
+ && self.componentConfig["success"]["redirect"]["follow_response"] === true
224
+ && self.$store != undefined
225
+ ) {
226
+ let path = response.data["redirect_to"] || response.request.responseURL
227
+ window.location.href = path
228
+ return;
229
+ }
230
+
231
+ if (self.shouldResetFormOnSuccessfulSubmit())
232
+ {
233
+ self.setProps(self.data, null);
234
+ self.initValues();
235
+ }
236
+ self.showInlineForm = false;
237
+ })
238
+ .catch(function (error) {
239
+ if (error.response && error.response.data && error.response.data.errors) {
240
+ self.errors = error.response.data.errors;
241
+ }
242
+ if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["emit"] != undefined) {
243
+ matestackEventHub.$emit(self.componentConfig["failure"]["emit"], error.response.data);
244
+ }
245
+ // transition handling
246
+ if (self.componentConfig["failure"] != undefined
247
+ && self.componentConfig["failure"]["transition"] != undefined
248
+ && (
249
+ self.componentConfig["failure"]["transition"]["follow_response"] == undefined
250
+ ||
251
+ self.componentConfig["failure"]["transition"]["follow_response"] === false
252
+ )
253
+ && self.$store != undefined
254
+ ) {
255
+ let path = self.componentConfig["failure"]["transition"]["path"]
256
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
257
+ return;
258
+ }
259
+ if (self.componentConfig["failure"] != undefined
260
+ && self.componentConfig["failure"]["transition"] != undefined
261
+ && self.componentConfig["failure"]["transition"]["follow_response"] === true
262
+ && self.$store != undefined
263
+ ) {
264
+ let path = error.response.data["transition_to"] || response.request.responseURL
265
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
266
+ return;
267
+ }
268
+ // redirect handling
269
+ if (self.componentConfig["failure"] != undefined
270
+ && self.componentConfig["failure"]["redirect"] != undefined
271
+ && (
272
+ self.componentConfig["failure"]["redirect"]["follow_response"] == undefined
273
+ ||
274
+ self.componentConfig["failure"]["redirect"]["follow_response"] === false
275
+ )
276
+ && self.$store != undefined
277
+ ) {
278
+ let path = self.componentConfig["failure"]["redirect"]["path"]
279
+ window.location.href = path
280
+ return;
281
+ }
282
+ if (self.componentConfig["failure"] != undefined
283
+ && self.componentConfig["failure"]["redirect"] != undefined
284
+ && self.componentConfig["failure"]["redirect"]["follow_response"] === true
285
+ && self.$store != undefined
286
+ ) {
287
+ let path = error.response.data["redirect_to"] || response.request.responseURL
288
+ window.location.href = path
289
+ return;
290
+ }
291
+ });
292
+ },
293
+ },
294
+ mounted: function () {
295
+ this.initValues();
164
296
  },
165
- mounted: function(){
166
- this.initValues()
167
- }
168
- }
297
+ };
169
298
 
170
- let component = Vue.component('matestack-ui-core-form', componentDef)
299
+ let component = Vue.component("matestack-ui-core-form", componentDef);
171
300
 
172
- export default componentDef
301
+ export default componentDef;