Merge branch 'dev' of https://git.verdnatura.es/salix into dev
* 'dev' of https://git.verdnatura.es/salix: new micro-service route: need reinstall all dependencies estructure for new module route bug fixed autocomplete and width dropdown
This commit is contained in:
commit
1301fefe68
|
@ -33,6 +33,10 @@ class Autocomplete extends Component {
|
|||
this._preLoad = true;
|
||||
this.getItems();
|
||||
}
|
||||
if (value && !this.width) {
|
||||
let rectangle = this.$element[0].getBoundingClientRect();
|
||||
this.width = Math.round(rectangle.width) - 10;
|
||||
}
|
||||
this._showDropDown = value;
|
||||
}
|
||||
|
||||
|
@ -271,9 +275,6 @@ class Autocomplete extends Component {
|
|||
this.showDropDown = this.mouseFocus;
|
||||
});
|
||||
});
|
||||
|
||||
let rectangle = this.$element[0].getBoundingClientRect();
|
||||
this.width = Math.round(rectangle.width) - 10;
|
||||
}
|
||||
|
||||
$onDestroy() {
|
||||
|
@ -301,7 +302,6 @@ module.component('vnAutocomplete', {
|
|||
itemAs: '@?',
|
||||
field: '=',
|
||||
label: '@',
|
||||
itemTemplate: '@?',
|
||||
multiple: '@?'
|
||||
},
|
||||
transclude: {
|
||||
|
|
|
@ -187,7 +187,6 @@ export default class Watcher extends Component {
|
|||
if (response === 'ACCEPT') {
|
||||
Object.assign(this.data, this.orgData);
|
||||
this.$state.go(this.state);
|
||||
|
||||
} else {
|
||||
this.state = null;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"salix": [],
|
||||
"auth": [],
|
||||
"core": [],
|
||||
"client": [],
|
||||
"production": [],
|
||||
"route": []
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
export * from './src/route';
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"module": "route",
|
||||
"name": "Route",
|
||||
|
||||
"validations" : false,
|
||||
"routes": [
|
||||
{
|
||||
"url": "/routes",
|
||||
"state": "routes",
|
||||
"component": "vn-route-index"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<<mg-ajax path="/client/api/Clients/filter" options="mgIndex"></mg-ajax>
|
||||
<div margin-medium>
|
||||
<div style="max-width: 40em; margin: 0 auto;">
|
||||
<vn-card>
|
||||
<vn-horizontal pad-medium>
|
||||
<vn-searchbar vn-auto
|
||||
index="index"
|
||||
on-search="$ctrl.search(index)"
|
||||
advanced="true"
|
||||
search="$ctrl.model.search"
|
||||
popover="vn-client-search-panel">
|
||||
</vn-searchbar>
|
||||
</vn-horizontal>
|
||||
</vn-card>
|
||||
<vn-card margin-medium-top>
|
||||
<vn-item-route ng-repeat="route in index.model.instances" title="View Route" client="route"></vn-item-route>
|
||||
</vn-card>
|
||||
<vn-paging index="index" total="index.model.count"></vn-paging>
|
||||
</div>
|
||||
<a ui-sref="create" fixed-bottom-right>
|
||||
<vn-float-button icon="add"></vn-float-button>
|
||||
</a>
|
||||
</div>
|
|
@ -0,0 +1,18 @@
|
|||
import ngModule from '../module';
|
||||
import './style.css';
|
||||
import './item-route';
|
||||
|
||||
export default class Controller {
|
||||
constructor() {
|
||||
this.model = {};
|
||||
}
|
||||
search(index) {
|
||||
index.filter.search = this.model.search;
|
||||
index.accept();
|
||||
}
|
||||
}
|
||||
|
||||
ngModule.component('vnRouteIndex', {
|
||||
template: require('./index.html'),
|
||||
controller: Controller
|
||||
});
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
import {ng} from 'vendor';
|
||||
import 'core';
|
||||
|
||||
const ngModule = ng.module('route', []);
|
||||
export default ngModule;
|
|
@ -0,0 +1,4 @@
|
|||
export * from './module';
|
||||
|
||||
// import components
|
||||
import './index/index';
|
|
@ -1,5 +1,5 @@
|
|||
import './spliting';
|
||||
import deps from 'spliting/modules.json';
|
||||
import deps from 'client/modules.json';
|
||||
import ngModule from './module';
|
||||
import {splitingRegister} from 'core';
|
||||
|
||||
|
|
38
gulpfile.js
38
gulpfile.js
|
@ -17,7 +17,8 @@ var srcDir = './client';
|
|||
var buildDir = './services/nginx/static';
|
||||
var langs = ['es', 'en'];
|
||||
|
||||
var modules = require('./spliting/modules.json');
|
||||
var modules = require('./client/modules.json');
|
||||
|
||||
var webpackConfig = require('./webpack.config.js');
|
||||
|
||||
// Main tasks
|
||||
|
@ -41,7 +42,8 @@ gulp.task('services', function() {
|
|||
'auth',
|
||||
'salix',
|
||||
'client',
|
||||
'production'
|
||||
'production',
|
||||
'route'
|
||||
];
|
||||
|
||||
for (var service of lbServices)
|
||||
|
@ -69,36 +71,9 @@ gulp.task('install', () => {
|
|||
}));
|
||||
});
|
||||
|
||||
// Spliting
|
||||
|
||||
var splitingFiles = './spliting/*';
|
||||
|
||||
gulp.task('spliting', function(cb) {
|
||||
var importTpl = fs.readFileSync('./spliting/import.tpl.js', 'utf8');
|
||||
var requireTpl = fs.readFileSync('./spliting/require.tpl.js', 'utf8');
|
||||
|
||||
for (var modName in modules) {
|
||||
var deps = modules[modName];
|
||||
var splitFile = `${srcDir}/${modName}/src/spliting.js`;
|
||||
|
||||
try {
|
||||
fs.unlinkSync(splitFile);
|
||||
} catch (e) {}
|
||||
|
||||
fs.appendFileSync(splitFile, importTpl);
|
||||
|
||||
var i = deps.length;
|
||||
while (i--)
|
||||
fs.appendFileSync(splitFile,
|
||||
requireTpl.replace(/\$module/g, deps[i]));
|
||||
}
|
||||
|
||||
cb();
|
||||
});
|
||||
|
||||
// Webpack
|
||||
|
||||
gulp.task('webpack', ['spliting'], function(cb) {
|
||||
gulp.task('webpack', function(cb) {
|
||||
var configCopy = Object.create(webpackConfig);
|
||||
var compiler = webpack(configCopy);
|
||||
|
||||
|
@ -109,7 +84,7 @@ gulp.task('webpack', ['spliting'], function(cb) {
|
|||
});
|
||||
});
|
||||
|
||||
gulp.task('webpack-dev-server', ['spliting'], function() {
|
||||
gulp.task('webpack-dev-server', function() {
|
||||
var configCopy = Object.create(webpackConfig);
|
||||
|
||||
for (var entry in configCopy.entry) {
|
||||
|
@ -170,7 +145,6 @@ gulp.task('routes', function() {
|
|||
// Watch
|
||||
|
||||
gulp.task('watch', function() {
|
||||
gulp.watch(splitingFiles, ['spliting']);
|
||||
gulp.watch(routeFiles, ['routes']);
|
||||
gulp.watch(localeFiles, ['locales']);
|
||||
});
|
||||
|
|
|
@ -40,6 +40,9 @@ http {
|
|||
location ~ ^/production(?:/(.*))?$ {
|
||||
proxy_pass http://127.0.0.1:3004/$1$is_args$args;
|
||||
}
|
||||
location ~ ^/route(?:/(.*))?$ {
|
||||
proxy_pass http://127.0.0.1:3005/$1$is_args$args;
|
||||
}
|
||||
# Este tiene que ser el último
|
||||
location ~ ^(?:/(.*))?$ {
|
||||
proxy_pass http://127.0.0.1:3001/$1$is_args$args;
|
||||
|
|
|
@ -35,6 +35,9 @@ http {
|
|||
location ~ ^/production(?:/(.*))?$ {
|
||||
proxy_pass http://production:3004/$1$is_args$args;
|
||||
}
|
||||
location ~ ^/route(?:/(.*))?$ {
|
||||
proxy_pass http://route:3005/$1$is_args$args;
|
||||
}
|
||||
# Este tiene que ser el último
|
||||
location ~ ^(?:/(.*))?$ {
|
||||
proxy_pass http://salix:3001/$1$is_args$args;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# EditorConfig helps developers define and maintain consistent
|
||||
# coding styles between different editors and IDEs
|
||||
# http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
|
@ -0,0 +1 @@
|
|||
/client/
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"extends": "loopback"
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
*.csv
|
||||
*.dat
|
||||
*.iml
|
||||
*.log
|
||||
*.out
|
||||
*.pid
|
||||
*.seed
|
||||
*.sublime-*
|
||||
*.swo
|
||||
*.swp
|
||||
*.tgz
|
||||
*.xml
|
||||
.DS_Store
|
||||
.idea
|
||||
.project
|
||||
.strong-pm
|
||||
coverage
|
||||
node_modules
|
||||
npm-debug.log
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"generator-loopback": {}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
FROM node:6.9.1
|
||||
|
||||
COPY . /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN npm install
|
||||
|
||||
RUN npm -g install pm2
|
||||
|
||||
CMD ["pm2-docker", "."]
|
||||
|
||||
EXPOSE 3005
|
|
@ -0,0 +1,3 @@
|
|||
# My Application
|
||||
|
||||
The project is generated by [LoopBack](http://loopback.io).
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"name": "Route",
|
||||
"base": "MyModel",
|
||||
"validateUpsert": true,
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "Number",
|
||||
"id": true,
|
||||
"description": "Identifier"
|
||||
},
|
||||
"date": {
|
||||
"type": "date"
|
||||
}
|
||||
},
|
||||
"acls": [
|
||||
{
|
||||
"accessType": "READ",
|
||||
"principalType": "ROLE",
|
||||
"principalId": "$everyone",
|
||||
"permission": "ALLOW"
|
||||
},
|
||||
{
|
||||
"accessType": "WRITE",
|
||||
"principalType": "ROLE",
|
||||
"principalId": "$everyone",
|
||||
"permission": "DENY"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"name": "vn-route",
|
||||
"version": "1.0.0",
|
||||
"main": "server/server.js",
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"start": "node .",
|
||||
"posttest": "npm run lint && nsp check"
|
||||
},
|
||||
"dependencies": {
|
||||
"compression": "^1.0.3",
|
||||
"cors": "^2.5.2",
|
||||
"helmet": "^1.3.0",
|
||||
"i18n": "^0.8.3",
|
||||
"loopback": "^3.8.0",
|
||||
"loopback-boot": "^2.24.0",
|
||||
"loopback-component-explorer": "^4.2.0",
|
||||
"loopback-connector-mysql": "^3.0.0",
|
||||
"loopback-connector-remote": "^3.1.1",
|
||||
"loopback-context": "^3.1.0",
|
||||
"serve-favicon": "^2.0.1",
|
||||
"strong-error-handler": "^2.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nsp": "^2.1.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.verdnatura.es/salix"
|
||||
},
|
||||
"license": "GPL-3.0",
|
||||
"description": "vn-route"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
module.exports = function enableAuthentication(server) {
|
||||
// enable authentication
|
||||
server.enableAuth();
|
||||
};
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
module.exports = function(server) {
|
||||
require ('../../../service/boot/root.js')(server);
|
||||
};
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"loopback-component-explorer": {
|
||||
"mountPath": "/explorer"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"restApiRoot": "/api",
|
||||
"host": "0.0.0.0",
|
||||
"port": 3005,
|
||||
"remoting": {
|
||||
"context": false,
|
||||
"rest": {
|
||||
"normalizeHttpPath": false,
|
||||
"xml": false
|
||||
},
|
||||
"json": {
|
||||
"strict": false,
|
||||
"limit": "100kb"
|
||||
},
|
||||
"urlencoded": {
|
||||
"extended": true,
|
||||
"limit": "100kb"
|
||||
},
|
||||
"cors": false,
|
||||
"handleErrors": false
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"db": {
|
||||
"name": "db",
|
||||
"connector": "memory",
|
||||
"file": "db.json"
|
||||
},
|
||||
"auth": {
|
||||
"name": "mysql",
|
||||
"connector": "mysql",
|
||||
"database": "salix",
|
||||
"debug": false,
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"username": "root",
|
||||
"password": "",
|
||||
"connectTimeout": 20000,
|
||||
"acquireTimeout": 20000
|
||||
},
|
||||
"vn": {
|
||||
"name": "mysql",
|
||||
"connector": "mysql",
|
||||
"database": "salix",
|
||||
"debug": false,
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"username": "root",
|
||||
"password": "",
|
||||
"connectTimeout": 20000,
|
||||
"acquireTimeout": 20000
|
||||
},
|
||||
"client": {
|
||||
"name": "client",
|
||||
"connector": "remote",
|
||||
"url": "http://localhost:3002/api"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"db":
|
||||
{
|
||||
"name": "db",
|
||||
"connector": "memory",
|
||||
"file": "db.json"
|
||||
},
|
||||
"auth":
|
||||
{
|
||||
"name": "mysql",
|
||||
"connector": "mysql",
|
||||
"database": "salix",
|
||||
"debug": false,
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"username": "root",
|
||||
"password": ""
|
||||
},
|
||||
"vn": {
|
||||
"name": "mysql",
|
||||
"connector": "mysql",
|
||||
"database": "salix",
|
||||
"debug": false,
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"username": "root",
|
||||
"password": "",
|
||||
"connectTimeout": 20000,
|
||||
"acquireTimeout": 20000
|
||||
},
|
||||
"client": {
|
||||
"name": "client",
|
||||
"connector": "remote",
|
||||
"url": "http://localhost:3002/api"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"final:after": {
|
||||
"strong-error-handler": {
|
||||
"params": {
|
||||
"debug": true,
|
||||
"log": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"initial:before": {
|
||||
"loopback#favicon": {}
|
||||
},
|
||||
"initial": {
|
||||
"compression": {},
|
||||
"cors": {
|
||||
"params": {
|
||||
"origin": true,
|
||||
"credentials": true,
|
||||
"maxAge": 86400
|
||||
}
|
||||
},
|
||||
"helmet#xssFilter": {},
|
||||
"helmet#frameguard": {
|
||||
"params": [
|
||||
"deny"
|
||||
]
|
||||
},
|
||||
"helmet#hsts": {
|
||||
"params": {
|
||||
"maxAge": 0,
|
||||
"includeSubdomains": true
|
||||
}
|
||||
},
|
||||
"helmet#hidePoweredBy": {},
|
||||
"helmet#ieNoOpen": {},
|
||||
"helmet#noSniff": {},
|
||||
"helmet#noCache": {
|
||||
"enabled": false
|
||||
},
|
||||
"loopback-context#per-request": {
|
||||
"params": {
|
||||
"enableHttpContext": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"session": {},
|
||||
"auth": {
|
||||
"loopback#token": {}
|
||||
},
|
||||
"auth:after": {
|
||||
"./middleware/currentUser": {}
|
||||
},
|
||||
"parse": {},
|
||||
"routes": {
|
||||
"loopback#rest": {
|
||||
"paths": [
|
||||
"${restApiRoot}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"files": {},
|
||||
"final": {
|
||||
"loopback#urlNotFound": {}
|
||||
},
|
||||
"final:after": {
|
||||
"strong-error-handler": {}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
module.exports = function(options) {
|
||||
return function storeCurrentUser(req, res, next) {
|
||||
if (!req.accessToken) {
|
||||
return next();
|
||||
}
|
||||
let LoopBackContext = require('loopback-context');
|
||||
let loopbackContext = LoopBackContext.getCurrentContext();
|
||||
if (loopbackContext) {
|
||||
loopbackContext.set('currentUser', req.accessToken.userId);
|
||||
}
|
||||
next();
|
||||
};
|
||||
};
|
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"_meta": {
|
||||
"sources": [
|
||||
"loopback/common/models",
|
||||
"loopback/server/models",
|
||||
"../../service/models",
|
||||
"../common/models",
|
||||
"./models"
|
||||
],
|
||||
"mixins": [
|
||||
"loopback/common/mixins",
|
||||
"loopback/server/mixins",
|
||||
"../common/mixins",
|
||||
"./mixins"
|
||||
]
|
||||
},
|
||||
"user": {
|
||||
"dataSource": "auth"
|
||||
},
|
||||
"AccessToken": {
|
||||
"dataSource": "auth",
|
||||
"relations": {
|
||||
"user": {
|
||||
"type": "belongsTo",
|
||||
"model": "user",
|
||||
"foreignKey": "userId"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ACL": {
|
||||
"dataSource": "auth",
|
||||
"public": false
|
||||
},
|
||||
"RoleMapping": {
|
||||
"dataSource": "auth",
|
||||
"public": false
|
||||
},
|
||||
"Role": {
|
||||
"dataSource": "auth",
|
||||
"public": false
|
||||
},
|
||||
"Account": {
|
||||
"dataSource": "auth"
|
||||
},
|
||||
"Route": {
|
||||
"dataSource": "vn",
|
||||
"public": true
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
'use strict';
|
||||
|
||||
var loopback = require('loopback');
|
||||
var boot = require('loopback-boot');
|
||||
|
||||
var app = module.exports = loopback();
|
||||
|
||||
app.start = function() {
|
||||
// start the web server
|
||||
return app.listen(function() {
|
||||
app.emit('started');
|
||||
var baseUrl = app.get('url').replace(/\/$/, '');
|
||||
console.log('Web server listening at: %s', baseUrl);
|
||||
if (app.get('loopback-component-explorer')) {
|
||||
var explorerPath = app.get('loopback-component-explorer').mountPath;
|
||||
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Bootstrap the application, configure models, datasources and middleware.
|
||||
// Sub-apps like REST API are mounted via boot scripts.
|
||||
boot(app, __dirname, function(err) {
|
||||
if (err) throw err;
|
||||
|
||||
// start the server if `$ node server.js`
|
||||
if (require.main === module)
|
||||
app.start();
|
||||
});
|
|
@ -1 +0,0 @@
|
|||
import * as core from 'core';
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"salix": ["client", "production"],
|
||||
"auth": [],
|
||||
"core": [],
|
||||
"client": [],
|
||||
"production": []
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
|
||||
export const $module = () => {
|
||||
return new Promise(resolve => {
|
||||
require.ensure([], () => {
|
||||
require('$module');
|
||||
resolve('$module');
|
||||
}, '$module');
|
||||
});
|
||||
};
|
||||
|
||||
core.splitingRegister.register('$module', $module);
|
Loading…
Reference in New Issue