Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix into dev
This commit is contained in:
commit
86d793b9ed
|
@ -33,8 +33,8 @@ export default {
|
|||
taxNumber: `${components.vnTextfield}[name="fi"]`,
|
||||
socialName: `${components.vnTextfield}[name="socialName"]`,
|
||||
street: `${components.vnTextfield}[name="street"]`,
|
||||
postcode: `vn-autocomplete[field="$ctrl.client.postcode"]`,
|
||||
city: `vn-autocomplete[field="$ctrl.client.city"]`,
|
||||
postcode: `${components.vnTextfield}[name="postcode"]`,
|
||||
city: `${components.vnTextfield}[name="city"]`,
|
||||
province: `vn-autocomplete[field="$ctrl.client.provinceFk"]`,
|
||||
country: `vn-autocomplete[field="$ctrl.client.countryFk"]`,
|
||||
userName: `${components.vnTextfield}[name="userName"]`,
|
||||
|
@ -65,8 +65,8 @@ export default {
|
|||
equalizationTaxCheckbox: 'vn-check[label="Is equalizated"] md-checkbox',
|
||||
acceptPropagationButton: 'vn-client-fiscal-data > vn-confirm button[response=ACCEPT]',
|
||||
addressInput: `${components.vnTextfield}[name="street"]`,
|
||||
postcodeAutocomplete: `vn-autocomplete[field="$ctrl.client.postcode"]`,
|
||||
cityAutocomplete: `vn-autocomplete[field="$ctrl.client.city"]`,
|
||||
postcodeInput: `${components.vnTextfield}[name="postcode"]`,
|
||||
cityInput: `${components.vnTextfield}[name="city"]`,
|
||||
provinceAutocomplete: 'vn-autocomplete[field="$ctrl.client.provinceFk"]',
|
||||
countryAutocomplete: 'vn-autocomplete[field="$ctrl.client.countryFk"]',
|
||||
activeCheckbox: 'vn-check[label="Active"] md-checkbox',
|
||||
|
@ -100,8 +100,8 @@ export default {
|
|||
defaultCheckboxInput: 'vn-check[label="Default"] md-checkbox',
|
||||
consigneeInput: `${components.vnTextfield}[name="nickname"]`,
|
||||
streetAddressInput: `${components.vnTextfield}[name="street"]`,
|
||||
postcodeAutocomplete: `vn-autocomplete[field="$ctrl.address.postalCode"]`,
|
||||
cityAutocomplete: `vn-autocomplete[field="$ctrl.address.city"]`,
|
||||
postcodeInput: `${components.vnTextfield}[name="postalCode"]`,
|
||||
cityInput: `${components.vnTextfield}[name="city"]`,
|
||||
provinceAutocomplete: 'vn-autocomplete[field="$ctrl.address.provinceFk"]',
|
||||
agencyAutocomplete: 'vn-autocomplete[field="$ctrl.address.agencyModeFk"]',
|
||||
phoneInput: `${components.vnTextfield}[name="phone"]`,
|
||||
|
|
|
@ -53,7 +53,10 @@ describe('Client create path', () => {
|
|||
.write(selectors.createClientView.name, 'Carol Danvers')
|
||||
.write(selectors.createClientView.socialName, 'AVG tax')
|
||||
.write(selectors.createClientView.street, 'Many places')
|
||||
.autocompleteSearch(selectors.createClientView.postcode, '46000')
|
||||
.autocompleteSearch(selectors.createClientView.country, 'España')
|
||||
.autocompleteSearch(selectors.createClientView.province, 'Province one')
|
||||
.write(selectors.createClientView.city, 'Valencia')
|
||||
.write(selectors.createClientView.postcode, '46000')
|
||||
.clearInput(selectors.createClientView.email)
|
||||
.write(selectors.createClientView.email, 'incorrect email format')
|
||||
.waitToClick(selectors.createClientView.createButton)
|
||||
|
@ -64,7 +67,7 @@ describe('Client create path', () => {
|
|||
|
||||
it(`should check for autocompleted city, province and country`, async() => {
|
||||
const clientCity = await nightmare
|
||||
.waitToGetProperty(`${selectors.createClientView.city} input`, 'value');
|
||||
.waitToGetProperty(`${selectors.createClientView.city}`, 'value');
|
||||
|
||||
const clientProvince = await nightmare
|
||||
.waitToGetProperty(`${selectors.createClientView.province} input`, 'value');
|
||||
|
|
|
@ -67,8 +67,12 @@ describe('Client Edit fiscalData path', () => {
|
|||
.write(selectors.clientFiscalData.fiscalIdInput, 'INVALID!')
|
||||
.clearInput(selectors.clientFiscalData.addressInput)
|
||||
.write(selectors.clientFiscalData.addressInput, 'Somewhere edited')
|
||||
.autocompleteSearch(selectors.clientFiscalData.cityAutocomplete, 'Valencia')
|
||||
.autocompleteSearch(selectors.clientFiscalData.postcodeAutocomplete, '46000')
|
||||
.autocompleteSearch(selectors.clientFiscalData.countryAutocomplete, 'España')
|
||||
.autocompleteSearch(selectors.clientFiscalData.provinceAutocomplete, 'Province one')
|
||||
.clearInput(selectors.clientFiscalData.cityInput)
|
||||
.write(selectors.clientFiscalData.cityInput, 'Valencia')
|
||||
.clearInput(selectors.clientFiscalData.postcodeInput)
|
||||
.write(selectors.clientFiscalData.postcodeInput, '46000')
|
||||
.waitToClick(selectors.clientFiscalData.activeCheckbox)
|
||||
.waitToClick(selectors.clientFiscalData.frozenCheckbox)
|
||||
.waitToClick(selectors.clientFiscalData.hasToInvoiceCheckbox)
|
||||
|
@ -194,14 +198,14 @@ describe('Client Edit fiscalData path', () => {
|
|||
|
||||
it('should confirm the postcode have been edited', async() => {
|
||||
const result = await nightmare
|
||||
.waitToGetProperty(`${selectors.clientFiscalData.postcodeAutocomplete} input`, 'value');
|
||||
.waitToGetProperty(`${selectors.clientFiscalData.postcodeInput}`, 'value');
|
||||
|
||||
expect(result).toContain('46000');
|
||||
});
|
||||
|
||||
it('should confirm the city have been autocompleted', async() => {
|
||||
const result = await nightmare
|
||||
.waitToGetProperty(`${selectors.clientFiscalData.cityAutocomplete} input`, 'value');
|
||||
.waitToGetProperty(`${selectors.clientFiscalData.cityInput}`, 'value');
|
||||
|
||||
expect(result).toEqual('Valencia');
|
||||
});
|
||||
|
|
|
@ -24,7 +24,11 @@ describe('Client Add address path', () => {
|
|||
const result = await nightmare
|
||||
.waitToClick(selectors.clientAddresses.defaultCheckboxInput)
|
||||
.clearInput(selectors.clientAddresses.streetAddressInput)
|
||||
.autocompleteSearch(selectors.clientAddresses.postcodeAutocomplete, '46000')
|
||||
.autocompleteSearch(selectors.clientAddresses.provinceAutocomplete, 'Province one')
|
||||
.clearInput(selectors.clientAddresses.cityInput)
|
||||
.write(selectors.clientAddresses.cityInput, 'Valencia')
|
||||
.clearInput(selectors.clientAddresses.postcodeInput)
|
||||
.write(selectors.clientAddresses.postcodeInput, '46000')
|
||||
.autocompleteSearch(selectors.clientAddresses.agencyAutocomplete, 'Entanglement')
|
||||
.write(selectors.clientAddresses.phoneInput, '999887744')
|
||||
.write(selectors.clientAddresses.mobileInput, '999887744')
|
||||
|
@ -36,14 +40,14 @@ describe('Client Add address path', () => {
|
|||
|
||||
it('should confirm the postcode have been edited', async() => {
|
||||
const result = await nightmare
|
||||
.waitToGetProperty(`${selectors.clientAddresses.postcodeAutocomplete} input`, 'value');
|
||||
.waitToGetProperty(`${selectors.clientAddresses.postcodeInput}`, 'value');
|
||||
|
||||
expect(result).toContain('46000');
|
||||
});
|
||||
|
||||
it('should confirm the city have been autocompleted', async() => {
|
||||
const result = await nightmare
|
||||
.waitToGetProperty(`${selectors.clientAddresses.cityAutocomplete} input`, 'value');
|
||||
.waitToGetProperty(`${selectors.clientAddresses.cityInput}`, 'value');
|
||||
|
||||
expect(result).toEqual('Valencia');
|
||||
});
|
||||
|
|
|
@ -7,10 +7,10 @@ import './style.scss';
|
|||
/**
|
||||
* Input with option selector.
|
||||
*
|
||||
* @property {String} valueField The data field name that should be shown
|
||||
* @property {String} showFiled The data field name that should be used as value
|
||||
* @property {String} showFiled The data field name that should be shown
|
||||
* @property {String} valueField The data field name that should be used as value
|
||||
* @property {Array} data Static data for the autocomplete
|
||||
* @property {Object} intialData A initial data to avoid the server request used to get the selection
|
||||
* @property {Object} intialData An initial data to avoid the server request used to get the selection
|
||||
* @property {Boolean} multiple Wether to allow multiple selection
|
||||
* @property {Object} selection Current object selected
|
||||
*
|
||||
|
|
|
@ -39,7 +39,7 @@ export default class Watcher extends Component {
|
|||
throw new Error('URL parameter ommitted');
|
||||
}
|
||||
|
||||
$onChanges(changes) {
|
||||
$onChanges() {
|
||||
if (this.data)
|
||||
this.updateOriginalData();
|
||||
}
|
||||
|
@ -222,6 +222,15 @@ export default class Watcher extends Component {
|
|||
this.setPristine();
|
||||
}
|
||||
|
||||
loadOriginalData() {
|
||||
Object.keys(this.data).forEach(key => {
|
||||
delete this.data[key];
|
||||
});
|
||||
|
||||
this.data = Object.assign(this.data, this.orgData);
|
||||
this.setPristine();
|
||||
}
|
||||
|
||||
copyInNewObject(data) {
|
||||
let newCopy = {};
|
||||
if (data && typeof data === 'object') {
|
||||
|
|
|
@ -249,4 +249,14 @@ describe('Component vnWatcher', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe(`loadOriginalData()`, () => {
|
||||
it(`should iterate over the current data object, delete all properties then assign the ones from original data`, () => {
|
||||
controller.data = {name: 'Bruce'};
|
||||
controller.orgData = {name: 'Batman'};
|
||||
controller.loadOriginalData();
|
||||
|
||||
expect(controller.data).toEqual(controller.orgData);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -54,5 +54,6 @@
|
|||
"Weekday cannot be blank": "Weekday cannot be blank",
|
||||
"This ticket can not be modified": "This ticket can not be modified",
|
||||
"You can't delete a confirmed order": "You can't delete a confirmed order",
|
||||
"Value has an invalid format": "Value has an invalid format"
|
||||
"Value has an invalid format": "Value has an invalid format",
|
||||
"The postcode doesn't exists. Ensure you put the correct format": "The postcode doesn't exists. Ensure you put the correct format"
|
||||
}
|
|
@ -104,5 +104,8 @@
|
|||
"You can't delete a confirmed order": "No puedes borrar un pedido confirmado",
|
||||
"Can't create stowaway for this ticket": "No se puede crear un polizon para este ticket",
|
||||
"Value has an invalid format": "El valor tiene un formato incorrecto",
|
||||
"Invalid quantity": "Cantidad invalida"
|
||||
"Invalid quantity": "Cantidad invalida",
|
||||
"This postal code is not valid": "This postal code is not valid",
|
||||
"is invalid": "is invalid",
|
||||
"The postcode doesn't exists. Ensure you put the correct format": "El código postal no existe. Asegúrate de ponerlo con el formato correcto"
|
||||
}
|
|
@ -75,8 +75,7 @@
|
|||
</vn-horizontal>
|
||||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"
|
||||
vn-acl="deliveryBoss">
|
||||
</vn-submit>
|
||||
<vn-submit label="Save" vn-acl="deliveryBoss"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -59,5 +59,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="$ctrl.$scope.form.$dirty" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -42,6 +42,21 @@ module.exports = Self => {
|
|||
next();
|
||||
});
|
||||
|
||||
Self.validateAsync('postalCode', hasValidPostcode, {
|
||||
message: `The postcode doesn't exists. Ensure you put the correct format`
|
||||
});
|
||||
|
||||
async function hasValidPostcode(err, done) {
|
||||
if (!this.postalCode)
|
||||
return done();
|
||||
|
||||
const models = Self.app.models;
|
||||
const postcode = await models.Postcode.findById(this.postalCode);
|
||||
|
||||
if (!postcode) err();
|
||||
done();
|
||||
}
|
||||
|
||||
// Helpers
|
||||
|
||||
Self.observe('before save', async function(ctx) {
|
||||
|
|
|
@ -160,6 +160,21 @@ module.exports = Self => {
|
|||
return regexp.test(value);
|
||||
}
|
||||
|
||||
Self.validateAsync('postCode', hasValidPostcode, {
|
||||
message: `The postcode doesn't exists. Ensure you put the correct format`
|
||||
});
|
||||
|
||||
async function hasValidPostcode(err, done) {
|
||||
if (!this.postcode)
|
||||
return done();
|
||||
|
||||
const models = Self.app.models;
|
||||
const postcode = await models.Postcode.findById(this.postcode);
|
||||
|
||||
if (!postcode) err();
|
||||
done();
|
||||
}
|
||||
|
||||
Self.observe('before save', async function(ctx) {
|
||||
let changes = ctx.data || ctx.instance;
|
||||
let orgData = ctx.currentInstance;
|
||||
|
|
|
@ -31,7 +31,11 @@
|
|||
value-field="id"
|
||||
label="Province">
|
||||
</vn-autocomplete>
|
||||
<vn-autocomplete vn-id="town" vn-one
|
||||
<vn-textfield vn-one
|
||||
label="City"
|
||||
field="$ctrl.address.city">
|
||||
</vn-textfield>
|
||||
<!-- <vn-autocomplete vn-id="town" vn-one
|
||||
label="City"
|
||||
url="/api/Towns"
|
||||
fields="['id', 'name']"
|
||||
|
@ -55,12 +59,16 @@
|
|||
{{code}}, {{town.name}} - {{town.province.name}}
|
||||
({{town.province.country.country}})
|
||||
</tpl-item>
|
||||
</vn-autocomplete>
|
||||
<vn-icon-button vn-auto margin-medium-v
|
||||
</vn-autocomplete> -->
|
||||
<vn-textfield vn-one
|
||||
label="Postcode"
|
||||
field="$ctrl.address.postalCode">
|
||||
</vn-textfield>
|
||||
<!-- <vn-icon-button vn-auto margin-medium-v
|
||||
icon="add_circle"
|
||||
vn-tooltip="New postcode"
|
||||
ng-click="postcode.open()">
|
||||
</vn-icon-button>
|
||||
</vn-icon-button> -->
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete
|
||||
|
|
|
@ -47,7 +47,11 @@
|
|||
value-field="id"
|
||||
label="Province">
|
||||
</vn-autocomplete>
|
||||
<vn-autocomplete vn-id="town" vn-one
|
||||
<vn-textfield vn-one
|
||||
label="City"
|
||||
field="$ctrl.address.city">
|
||||
</vn-textfield>
|
||||
<!-- <vn-autocomplete vn-id="town" vn-one
|
||||
label="City"
|
||||
url="/api/Towns"
|
||||
fields="['id', 'name']"
|
||||
|
@ -66,12 +70,16 @@
|
|||
show-field="code"
|
||||
value-field="code"
|
||||
label="Postcode">
|
||||
</vn-autocomplete>
|
||||
<vn-icon-button vn-auto margin-medium-v
|
||||
</vn-autocomplete> -->
|
||||
<vn-textfield vn-one
|
||||
label="Postcode"
|
||||
field="$ctrl.address.postalCode">
|
||||
</vn-textfield>
|
||||
<!-- <vn-icon-button vn-auto margin-medium-v
|
||||
icon="add_circle"
|
||||
vn-tooltip="New postcode"
|
||||
ng-click="postcode.open()">
|
||||
</vn-icon-button>
|
||||
</vn-icon-button> -->
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete vn-one
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
<vn-horizontal>
|
||||
<vn-autocomplete
|
||||
vn-one
|
||||
disabled="false"
|
||||
field="$ctrl.client.salesPersonFk"
|
||||
url="/client/api/Clients/activeWorkersWithRole"
|
||||
show-field="nickname"
|
||||
|
@ -53,9 +52,8 @@
|
|||
label="Salesperson"
|
||||
vn-acl="salesAssistant">
|
||||
</vn-autocomplete>
|
||||
<vn-autocomplete
|
||||
<vn-autocomplete
|
||||
vn-one
|
||||
initial-data="$ctrl.client.contactChannel"
|
||||
field="$ctrl.client.contactChannelFk"
|
||||
url="/client/api/ContactChannels"
|
||||
label="Channel">
|
||||
|
@ -64,6 +62,7 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
|
|
@ -11,4 +11,5 @@ You can save multiple emails: >-
|
|||
Puede guardar varios correos electrónicos encadenándolos mediante comas
|
||||
sin espacios, ejemplo: user@dominio.com, user2@dominio.com siendo el primer
|
||||
correo electrónico el principal
|
||||
Contact: Contacto
|
||||
Contact: Contacto
|
||||
Undo changes: Deshacer cambios
|
|
@ -85,6 +85,7 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save" vn-acl="salesAssistant"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
||||
|
|
|
@ -50,7 +50,11 @@
|
|||
</vn-autocomplete>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete vn-id="town" vn-one
|
||||
<vn-textfield vn-one
|
||||
label="City"
|
||||
field="$ctrl.client.city">
|
||||
</vn-textfield>
|
||||
<!-- <vn-autocomplete vn-id="town" vn-one
|
||||
label="City"
|
||||
url="/api/Towns"
|
||||
fields="['id', 'name']"
|
||||
|
@ -58,13 +62,17 @@
|
|||
show-field="name"
|
||||
value-field="name"
|
||||
field="$ctrl.client.city">
|
||||
</vn-autocomplete>
|
||||
<vn-icon-button vn-auto margin-medium-v
|
||||
</vn-autocomplete> -->
|
||||
<!-- <vn-icon-button vn-auto margin-medium-v
|
||||
icon="add_circle"
|
||||
vn-tooltip="New postcode"
|
||||
ng-click="postcode.open()">
|
||||
</vn-icon-button>
|
||||
<vn-autocomplete vn-one
|
||||
</vn-icon-button> -->
|
||||
<vn-textfield vn-one
|
||||
label="Postcode"
|
||||
field="$ctrl.client.postcode">
|
||||
</vn-textfield>
|
||||
<!-- <vn-autocomplete vn-one
|
||||
url="/api/Postcodes/location"
|
||||
fields="['code', 'townFk']"
|
||||
field="$ctrl.client.postcode"
|
||||
|
@ -79,7 +87,7 @@
|
|||
{{code}}, {{town.name}} - {{town.province.name}}
|
||||
({{town.province.country.country}})
|
||||
</tpl-item>
|
||||
</vn-autocomplete>
|
||||
</vn-autocomplete> -->
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-textfield
|
||||
|
|
|
@ -47,7 +47,15 @@
|
|||
</vn-autocomplete>
|
||||
</vn-horizontal>
|
||||
<vn-horizontal>
|
||||
<vn-autocomplete vn-id="town" vn-one
|
||||
<vn-textfield vn-one
|
||||
label="City"
|
||||
field="$ctrl.client.city">
|
||||
</vn-textfield>
|
||||
<vn-textfield vn-one
|
||||
label="Postcode"
|
||||
field="$ctrl.client.postcode">
|
||||
</vn-textfield>
|
||||
<!-- <vn-autocomplete vn-id="town" vn-one
|
||||
label="City"
|
||||
url="/api/Towns"
|
||||
fields="['id', 'name']"
|
||||
|
@ -66,7 +74,7 @@
|
|||
show-field="code"
|
||||
value-field="code"
|
||||
label="Postcode">
|
||||
</vn-autocomplete>
|
||||
</vn-autocomplete> -->
|
||||
</vn-horizontal>
|
||||
<vn-horizontal pad-small-v>
|
||||
<vn-check
|
||||
|
@ -120,8 +128,8 @@
|
|||
</vn-horizontal>
|
||||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save">
|
||||
</vn-submit>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="$ctrl.$.form.$dirty" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
<vn-confirm
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button ng-if="$ctrl.canChangePassword" label="Change password" vn-dialog="change-pass"></vn-button>
|
||||
<vn-button label="Undo changes" ng-if="$ctrl.$.form.$dirty" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
<vn-dialog
|
||||
|
|
|
@ -98,5 +98,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="$ctrl.$scope.form.$dirty" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -42,5 +42,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
|
@ -4,6 +4,12 @@
|
|||
data="classes"
|
||||
auto-load="true">
|
||||
</vn-crud-model>
|
||||
<vn-watcher
|
||||
vn-id="watcher"
|
||||
data="$ctrl.taxes"
|
||||
form="form"
|
||||
save="patch">
|
||||
</vn-watcher>
|
||||
<form name="form" ng-submit="$ctrl.submit()" compact>
|
||||
<vn-card pad-large>
|
||||
<vn-horizontal ng-repeat="tax in $ctrl.taxes track by $index">
|
||||
|
@ -23,5 +29,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
|
@ -67,5 +67,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -72,5 +72,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -32,5 +32,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="watcher.dataChanged()" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
|
@ -15,5 +15,6 @@
|
|||
</vn-card>
|
||||
<vn-button-bar>
|
||||
<vn-submit label="Save"></vn-submit>
|
||||
<vn-button label="Undo changes" ng-if="$ctrl.$scope.form.$dirty" ng-click="watcher.loadOriginalData()"></vn-button>
|
||||
</vn-button-bar>
|
||||
</form>
|
||||
|
|
Loading…
Reference in New Issue