@@ -81,7 +81,7 @@ export default {
81
81
let parts = file . name . split ( '.' )
82
82
let extension = parts . at ( - 1 )
83
83
let type = file . type || extension
84
- context . catchAndParseFile ( content , type , new Date ( ) . getTime ( ) )
84
+ context . catchAndParseFile ( content , type )
85
85
}
86
86
} )
87
87
this . $refs . importRouteDropzone . removeAllFiles ( )
@@ -93,76 +93,103 @@ export default {
93
93
* @param {* } type
94
94
*/
95
95
catchAndParseFile ( fileContent , type ) {
96
- let fileType = null
97
- let newJobs = [ ]
98
- let newVehicles = [ ]
96
+ let parsedInfos = null
99
97
let newSkills = [ ]
98
+
100
99
if ( type . indexOf ( 'csv' ) > - 1 ) {
101
- fileType = 'csv'
102
- if ( this . expectedData === 'jobs' ) {
103
- newJobs = Job . fromCsv ( fileContent )
104
- } else if ( this . expectedData === 'vehicles' ) {
105
- newVehicles = Vehicle . fromCsv ( fileContent )
106
- }
100
+ parsedInfos = this . parseCsvFile ( fileContent )
107
101
} else if ( type . indexOf ( 'json' ) > - 1 || type . indexOf ( 'geojson' ) > - 1 ) {
108
102
const parsedJson = JSON . parse ( fileContent )
109
103
if ( parsedJson && parsedJson . features ) {
110
- fileType = 'geojson'
111
- if ( this . expectedData === 'jobs' ) {
112
- for ( const j of parsedJson . features ) {
113
- try {
114
- newJobs . push ( Job . fromGeoJsonObject ( j ) )
115
- } catch {
116
- this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.jobs' ) , )
117
- }
118
- }
119
- } else if ( this . expectedData === 'vehicles' ) {
120
- for ( const v of parsedJson . features ) {
121
- try {
122
- newVehicles . push ( Vehicle . fromGeoJsonObject ( v ) )
123
- } catch {
124
- this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.vehicles' ) , )
125
- }
126
- }
127
- }
104
+ parsedInfos = this . parseGeojsonFile ( parsedJson )
128
105
} else {
129
- fileType = 'json'
130
- if ( this . expectedData === 'jobs' ) {
131
- for ( const j of parsedJson ) {
132
- try {
133
- newJobs . push ( Job . fromObject ( j ) )
134
- } catch {
135
- this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.jobs' ) , )
136
- }
137
- }
138
- } else if ( this . expectedData === 'vehicles' ) {
139
- for ( const v of parsedJson ) {
140
- try {
141
- newVehicles . push ( Vehicle . fromObject ( v ) )
142
- } catch {
143
- this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.vehicles' ) , )
144
- }
145
- }
146
- } else if ( this . expectedData === 'skills' ) {
147
- for ( const s of parsedJson ) {
148
- try {
149
- newSkills . push ( Skill . fromObject ( s ) )
150
- } catch {
151
- this . showError ( this . $t ( 'optimizationImport.notValidSkill' ) )
152
- }
153
- }
154
- }
106
+ parsedInfos = this . parseJsonFile ( parsedJson )
107
+ newSkills = parsedInfos . newSkills
155
108
}
156
109
}
157
- if ( fileType ) {
158
- this . $emit ( 'saveOptimizationImport' , { jobs : newJobs , vehicles : newVehicles , skills : newSkills } )
110
+
111
+ if ( parsedInfos ) {
112
+ this . $emit ( 'saveOptimizationImport' , { jobs : parsedInfos . newJobs , vehicles : parsedInfos . newVehicles , skills : newSkills } )
159
113
this . closeImporter ( )
160
114
} else {
161
115
this . showError ( this . $t ( 'routeImporter.failedToLoadFile' ) , { timeout : 0 } )
162
116
this . $emit ( 'failedToImportFile' )
163
117
}
164
118
} ,
119
+ parseCsvFile ( fileContent ) {
120
+ let newJobs = [ ]
121
+ let newVehicles = [ ]
122
+
123
+ if ( this . expectedData === 'jobs' ) {
124
+ newJobs = Job . fromCsv ( fileContent )
125
+ } else if ( this . expectedData === 'vehicles' ) {
126
+ newVehicles = Vehicle . fromCsv ( fileContent )
127
+ }
128
+ return { newJobs, newVehicles}
129
+ } ,
130
+ /**
131
+ * Parse geojson file
132
+ * @param parsedJson
133
+ * @returns {{newJobs: *[], newVehicles: *[]} }
134
+ */
135
+ parseGeojsonFile ( parsedJson ) {
136
+ let newJobs = [ ]
137
+ let newVehicles = [ ]
138
+
139
+ if ( this . expectedData === 'jobs' ) {
140
+ for ( const j of parsedJson . features ) {
141
+ try {
142
+ newJobs . push ( Job . fromGeoJsonObject ( j ) )
143
+ } catch {
144
+ this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.jobs' ) , )
145
+ }
146
+ }
147
+ } else if ( this . expectedData === 'vehicles' ) {
148
+ for ( const v of parsedJson . features ) {
149
+ try {
150
+ newVehicles . push ( Vehicle . fromGeoJsonObject ( v ) )
151
+ } catch {
152
+ this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( 'optimization.vehicles' ) , )
153
+ }
154
+ }
155
+ }
156
+ return { newJobs, newVehicles}
157
+ } ,
158
+ /**
159
+ * Parse json file
160
+ * @param parsedJson
161
+ * @returns {{newJobs: *[], newVehicles: *[], newSkills: *[]} }
162
+ */
163
+ parseJsonFile ( parsedJson ) {
164
+ let newJobs = [ ]
165
+ let newVehicles = [ ]
166
+ let newSkills = [ ]
165
167
168
+ if ( this . expectedData === 'jobs' ) {
169
+ newJobs = this . parseJsonObjects ( parsedJson , newJobs , Job , 'jobs' )
170
+ } else if ( this . expectedData === 'vehicles' ) {
171
+ newVehicles = this . parseJsonObjects ( parsedJson , newVehicles , Vehicle , 'vehicles' )
172
+ } else if ( this . expectedData === 'skills' ) {
173
+ for ( const s of parsedJson ) {
174
+ try {
175
+ newSkills . push ( Skill . fromObject ( s ) )
176
+ } catch {
177
+ this . showError ( this . $t ( 'optimizationImport.notValidSkill' ) )
178
+ }
179
+ }
180
+ }
181
+ return { newJobs, newVehicles, newSkills}
182
+ } ,
183
+ parseJsonObjects ( parsedJson , newObjects , ObjectClass , item ) {
184
+ for ( const j of parsedJson ) {
185
+ try {
186
+ newObjects . push ( ObjectClass . fromObject ( j ) )
187
+ } catch {
188
+ this . showError ( this . $t ( 'optimizationImport.notValid' ) + this . $t ( `optimization.${ item } ` ) , )
189
+ }
190
+ }
191
+ return newObjects
192
+ } ,
166
193
// save jobs from pasted JSON and return error if not a valid JSON
167
194
savePastedJson ( ) {
168
195
try {
0 commit comments