Merge branch 'dev' into 3388-ticket_sale
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
This commit is contained in:
commit
16df8fd2f3
|
@ -71,7 +71,7 @@
|
|||
color: $color-font;
|
||||
|
||||
&::placeholder {
|
||||
color: $color-font-bg;
|
||||
color: $color-font-bg-marginal;
|
||||
}
|
||||
&[type=time],
|
||||
&[type=date],
|
||||
|
|
|
@ -97,18 +97,21 @@
|
|||
on-change="itemTag.value = null">
|
||||
</vn-autocomplete>
|
||||
<vn-textfield
|
||||
ng-show="tag.selection.isFree !== false"
|
||||
ng-show="tag.selection.isFree || tag.selection.isFree == undefined"
|
||||
vn-id="text"
|
||||
label="Value"
|
||||
ng-model="itemTag.value">
|
||||
</vn-textfield>
|
||||
<vn-autocomplete
|
||||
<vn-autocomplete
|
||||
vn-one
|
||||
ng-show="tag.selection.isFree === false"
|
||||
url="{{$ctrl.getSourceTable(tag.selection)}}"
|
||||
url="{{'Tags/' + itemTag.tagFk + '/filterValue'}}"
|
||||
search-function="{value: $search}"
|
||||
label="Value"
|
||||
ng-model="itemTag.value"
|
||||
show-field="name"
|
||||
value-field="name">
|
||||
show-field="value"
|
||||
value-field="value"
|
||||
rule>
|
||||
</vn-autocomplete>
|
||||
<vn-icon-button
|
||||
vn-none
|
||||
|
|
|
@ -55,21 +55,9 @@ class Controller extends SearchPanel {
|
|||
this.$.filter = value;
|
||||
}
|
||||
|
||||
getSourceTable(selection) {
|
||||
if (!selection || selection.isFree === true)
|
||||
return null;
|
||||
|
||||
if (selection.sourceTable) {
|
||||
return ''
|
||||
+ selection.sourceTable.charAt(0).toUpperCase()
|
||||
+ selection.sourceTable.substring(1) + 's';
|
||||
} else if (selection.sourceTable == null)
|
||||
return `ItemTags/filterItemTags/${selection.id}`;
|
||||
}
|
||||
|
||||
removeField(index, field) {
|
||||
this.fieldFilters.splice(index, 1);
|
||||
this.$.filter[field] = undefined;
|
||||
delete this.$.filter[field];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,33 +12,48 @@ describe('Entry', () => {
|
|||
controller = $componentController('vnLatestBuysSearchPanel', {$element});
|
||||
}));
|
||||
|
||||
describe('getSourceTable()', () => {
|
||||
it(`should return null if there's no selection`, () => {
|
||||
let selection = null;
|
||||
let result = controller.getSourceTable(selection);
|
||||
describe('filter() setter', () => {
|
||||
it(`should set the tags property to the scope filter with an empty array`, () => {
|
||||
const expectedFilter = {
|
||||
tags: [{}]
|
||||
};
|
||||
controller.filter = null;
|
||||
|
||||
expect(result).toBeNull();
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
});
|
||||
|
||||
it(`should return null if there's a selection but its isFree property is truthy`, () => {
|
||||
let selection = {isFree: true};
|
||||
let result = controller.getSourceTable(selection);
|
||||
it(`should set the tags property to the scope filter with an array of tags`, () => {
|
||||
const expectedFilter = {
|
||||
description: 'My item',
|
||||
tags: [{}]
|
||||
};
|
||||
const expectedFieldFilter = [{
|
||||
info: {
|
||||
label: 'description',
|
||||
name: 'description',
|
||||
type: null
|
||||
},
|
||||
name: 'description',
|
||||
value: 'My item'
|
||||
}];
|
||||
controller.filter = {
|
||||
description: 'My item'
|
||||
};
|
||||
|
||||
expect(result).toBeNull();
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
expect(controller.fieldFilters).toEqual(expectedFieldFilter);
|
||||
});
|
||||
});
|
||||
|
||||
it(`should return the formated sourceTable concatenated to a path`, () => {
|
||||
let selection = {sourceTable: 'hello guy'};
|
||||
let result = controller.getSourceTable(selection);
|
||||
describe('removeField()', () => {
|
||||
it(`should remove the description property from the fieldFilters and from the scope filter`, () => {
|
||||
const expectedFilter = {tags: [{}]};
|
||||
controller.filter = {description: 'My item'};
|
||||
|
||||
expect(result).toEqual('Hello guys');
|
||||
});
|
||||
controller.removeField(0, 'description');
|
||||
|
||||
it(`should return a path if there's no sourceTable and the selection has an id`, () => {
|
||||
let selection = {id: 99};
|
||||
let result = controller.getSourceTable(selection);
|
||||
|
||||
expect(result).toEqual(`ItemTags/filterItemTags/${selection.id}`);
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
expect(controller.fieldFilters).toEqual([]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -47,9 +47,14 @@ module.exports = Self => {
|
|||
const where = filter.where;
|
||||
if (where && where.value) {
|
||||
stmt.merge(conn.makeWhere({value: {like: `%${where.value}%`}}));
|
||||
stmt.merge(`
|
||||
ORDER BY value LIKE '${where.value}' DESC,
|
||||
value LIKE '${where.value}%' DESC`);
|
||||
|
||||
const orderStmt = new ParameterizedSQL(
|
||||
`ORDER BY value LIKE ? DESC,
|
||||
value LIKE ? DESC`, [
|
||||
where.value,
|
||||
`${where.value}%`
|
||||
]);
|
||||
ParameterizedSQL.append(stmt, orderStmt);
|
||||
}
|
||||
|
||||
stmt.merge(conn.makeLimit(filter));
|
||||
|
|
|
@ -83,19 +83,21 @@
|
|||
</vn-autocomplete>
|
||||
<vn-textfield
|
||||
vn-one
|
||||
ng-show="tag.selection.isFree !== false"
|
||||
ng-show="tag.selection.isFree || tag.selection.isFree == undefined"
|
||||
vn-id="text"
|
||||
label="Value"
|
||||
ng-model="itemTag.value">
|
||||
</vn-textfield>
|
||||
<vn-autocomplete
|
||||
<vn-autocomplete
|
||||
vn-one
|
||||
ng-show="tag.selection.isFree === false"
|
||||
url="{{$ctrl.getSourceTable(tag.selection)}}"
|
||||
url="{{'Tags/' + itemTag.tagFk + '/filterValue'}}"
|
||||
search-function="{value: $search}"
|
||||
label="Value"
|
||||
ng-model="itemTag.value"
|
||||
show-field="name"
|
||||
value-field="name">
|
||||
show-field="value"
|
||||
value-field="value"
|
||||
rule>
|
||||
</vn-autocomplete>
|
||||
<vn-icon-button
|
||||
vn-none
|
||||
|
|
|
@ -55,21 +55,9 @@ class Controller extends SearchPanel {
|
|||
this.$.filter = value;
|
||||
}
|
||||
|
||||
getSourceTable(selection) {
|
||||
if (!selection || selection.isFree === true)
|
||||
return null;
|
||||
|
||||
if (selection.sourceTable) {
|
||||
return ''
|
||||
+ selection.sourceTable.charAt(0).toUpperCase()
|
||||
+ selection.sourceTable.substring(1) + 's';
|
||||
} else if (selection.sourceTable == null)
|
||||
return `ItemTags/filterItemTags/${selection.id}`;
|
||||
}
|
||||
|
||||
removeField(index, field) {
|
||||
this.fieldFilters.splice(index, 1);
|
||||
this.$.filter[field] = undefined;
|
||||
delete this.$.filter[field];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -12,33 +12,48 @@ describe('Item', () => {
|
|||
controller = $componentController('vnItemSearchPanel', {$element});
|
||||
}));
|
||||
|
||||
describe('getSourceTable()', () => {
|
||||
it(`should return null if there's no selection`, () => {
|
||||
let selection = null;
|
||||
let result = controller.getSourceTable(selection);
|
||||
describe('filter() setter', () => {
|
||||
it(`should set the tags property to the scope filter with an empty array`, () => {
|
||||
const expectedFilter = {
|
||||
tags: [{}]
|
||||
};
|
||||
controller.filter = null;
|
||||
|
||||
expect(result).toBeNull();
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
});
|
||||
|
||||
it(`should return null if there's a selection but its isFree property is truthy`, () => {
|
||||
let selection = {isFree: true};
|
||||
let result = controller.getSourceTable(selection);
|
||||
it(`should set the tags property to the scope filter with an array of tags`, () => {
|
||||
const expectedFilter = {
|
||||
description: 'My item',
|
||||
tags: [{}]
|
||||
};
|
||||
const expectedFieldFilter = [{
|
||||
info: {
|
||||
label: 'description',
|
||||
name: 'description',
|
||||
type: null
|
||||
},
|
||||
name: 'description',
|
||||
value: 'My item'
|
||||
}];
|
||||
controller.filter = {
|
||||
description: 'My item'
|
||||
};
|
||||
|
||||
expect(result).toBeNull();
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
expect(controller.fieldFilters).toEqual(expectedFieldFilter);
|
||||
});
|
||||
});
|
||||
|
||||
it(`should return the formated sourceTable concatenated to a path`, () => {
|
||||
let selection = {sourceTable: 'hello guy'};
|
||||
let result = controller.getSourceTable(selection);
|
||||
describe('removeField()', () => {
|
||||
it(`should remove the description property from the fieldFilters and from the scope filter`, () => {
|
||||
const expectedFilter = {tags: [{}]};
|
||||
controller.filter = {description: 'My item'};
|
||||
|
||||
expect(result).toEqual('Hello guys');
|
||||
});
|
||||
controller.removeField(0, 'description');
|
||||
|
||||
it(`should return a path if there's no sourceTable and the selection has an id`, () => {
|
||||
let selection = {id: 99};
|
||||
let result = controller.getSourceTable(selection);
|
||||
|
||||
expect(result).toEqual(`ItemTags/filterItemTags/${selection.id}`);
|
||||
expect(controller.filter).toEqual(expectedFilter);
|
||||
expect(controller.fieldFilters).toEqual([]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue