mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-02-17 02:41:02 +01:00
Fix Et2Select was losing options set in template
All JS tests now pass. yay.
This commit is contained in:
parent
b7258692a4
commit
45ccceb1c7
@ -8,7 +8,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
import {Et2InputWidget} from "../Et2InputWidget/Et2InputWidget";
|
||||||
import {StaticOptions} from "./StaticOptions";
|
|
||||||
import {dedupeMixin, html, PropertyValues, render, repeat, TemplateResult} from "@lion/core";
|
import {dedupeMixin, html, PropertyValues, render, repeat, TemplateResult} from "@lion/core";
|
||||||
import {et2_readAttrWithDefault} from "../et2_core_xml";
|
import {et2_readAttrWithDefault} from "../et2_core_xml";
|
||||||
import {cleanSelectOptions, find_select_options, SelectOption} from "./FindSelectOptions";
|
import {cleanSelectOptions, find_select_options, SelectOption} from "./FindSelectOptions";
|
||||||
@ -79,11 +78,18 @@ export const Et2widgetWithSelectMixin = dedupeMixin((superclass) =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options found in the XML when reading the template
|
||||||
|
* @type {SelectOption[]}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _xmlOptions : SelectOption[] = [];
|
||||||
|
|
||||||
constructor()
|
constructor()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.__select_options = <StaticOptions[]>[];
|
this.__select_options = <SelectOption[]>[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param {import('@lion/core').PropertyValues } changedProperties */
|
/** @param {import('@lion/core').PropertyValues } changedProperties */
|
||||||
@ -94,7 +100,7 @@ export const Et2widgetWithSelectMixin = dedupeMixin((superclass) =>
|
|||||||
// If the ID changed (or was just set) find the select options
|
// If the ID changed (or was just set) find the select options
|
||||||
if(changedProperties.has("id"))
|
if(changedProperties.has("id"))
|
||||||
{
|
{
|
||||||
const options = find_select_options(this);
|
const options = find_select_options(this, {}, this._xmlOptions);
|
||||||
if (options.length) this.select_options = options;
|
if (options.length) this.select_options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,6 +245,7 @@ export const Et2widgetWithSelectMixin = dedupeMixin((superclass) =>
|
|||||||
title: et2_readAttrWithDefault(options[i], "title", "")
|
title: et2_readAttrWithDefault(options[i], "title", "")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
this._xmlOptions = new_options;
|
||||||
if(options.length == 0 && this.__select_options.length)
|
if(options.length == 0 && this.__select_options.length)
|
||||||
{
|
{
|
||||||
// Start with any existing options, (static options from type)
|
// Start with any existing options, (static options from type)
|
||||||
|
@ -17,7 +17,8 @@ let element : Et2Select;
|
|||||||
window.egw = {
|
window.egw = {
|
||||||
tooltipUnbind: () => {},
|
tooltipUnbind: () => {},
|
||||||
lang: i => i + "*",
|
lang: i => i + "*",
|
||||||
image: () => "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4IiB2aWV3Qm94PSIwIDAgMzIgMzIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjNjk2OTY5IiBkPSJNNi45NDMsMjguNDUzDQoJYzAuOTA2LDAuNzY1LDIuMDk3LDEuMTI3LDMuMjg2LDEuMTA5YzAuNDMsMC4wMTQsMC44NTItMC4wNjgsMS4yNjUtMC4yMDdjMC42NzktMC4xOCwxLjMyOC0wLjQ1LDEuODY2LTAuOTAyTDI5LjQwMywxNC45DQoJYzEuNzcyLTEuNDk4LDEuNzcyLTMuOTI1LDAtNS40MjJjLTEuNzcyLTEuNDk3LTQuNjQ2LTEuNDk3LTYuNDE4LDBMMTAuMTE5LDIwLjM0OWwtMi4zODktMi40MjRjLTEuNDQtMS40NTctMy43NzItMS40NTctNS4yMTIsMA0KCWMtMS40MzgsMS40Ni0xLjQzOCwzLjgyNSwwLDUuMjgxQzIuNTE4LDIzLjIwNiw1LjQ3NCwyNi45NDcsNi45NDMsMjguNDUzeiIvPg0KPC9zdmc+DQo="
|
image: () => "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4IiB2aWV3Qm94PSIwIDAgMzIgMzIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMyIDMyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjNjk2OTY5IiBkPSJNNi45NDMsMjguNDUzDQoJYzAuOTA2LDAuNzY1LDIuMDk3LDEuMTI3LDMuMjg2LDEuMTA5YzAuNDMsMC4wMTQsMC44NTItMC4wNjgsMS4yNjUtMC4yMDdjMC42NzktMC4xOCwxLjMyOC0wLjQ1LDEuODY2LTAuOTAyTDI5LjQwMywxNC45DQoJYzEuNzcyLTEuNDk4LDEuNzcyLTMuOTI1LDAtNS40MjJjLTEuNzcyLTEuNDk3LTQuNjQ2LTEuNDk3LTYuNDE4LDBMMTAuMTE5LDIwLjM0OWwtMi4zODktMi40MjRjLTEuNDQtMS40NTctMy43NzItMS40NTctNS4yMTIsMA0KCWMtMS40MzgsMS40Ni0xLjQzOCwzLjgyNSwwLDUuMjgxQzIuNTE4LDIzLjIwNiw1LjQ3NCwyNi45NDcsNi45NDMsMjguNDUzeiIvPg0KPC9zdmc+DQo=",
|
||||||
|
webserverUrl: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
let options = [
|
let options = [
|
||||||
@ -64,7 +65,7 @@ describe("Select widget", () =>
|
|||||||
element = <Et2Select>container.getWidgetById('select');
|
element = <Et2Select>container.getWidgetById('select');
|
||||||
|
|
||||||
/** TESTING **/
|
/** TESTING **/
|
||||||
assert.equal(element.querySelector("select").children.length, 1, "Missing static option");
|
assert.isNotNull(element.querySelector("[value='option']"), "Missing static option");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("directly in sel_options", async() =>
|
it("directly in sel_options", async() =>
|
||||||
@ -83,7 +84,7 @@ describe("Select widget", () =>
|
|||||||
element = <Et2Select>container.getWidgetById('select');
|
element = <Et2Select>container.getWidgetById('select');
|
||||||
|
|
||||||
/** TESTING **/
|
/** TESTING **/
|
||||||
assert.equal(element.querySelector("select").children.length, 2);
|
assert.equal(element.querySelectorAll("sl-menu-item").length, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("merges static options with sel_options", async() =>
|
it("merges static options with sel_options", async() =>
|
||||||
@ -105,7 +106,7 @@ describe("Select widget", () =>
|
|||||||
/** TESTING **/
|
/** TESTING **/
|
||||||
|
|
||||||
// @ts-ignore o.value isn't known by TypeScript, but it's there
|
// @ts-ignore o.value isn't known by TypeScript, but it's there
|
||||||
let option_keys = Object.values(element.querySelector("select").children).map(o => o.value);
|
let option_keys = Object.values(element.querySelectorAll("sl-menu-item")).map(o => o.value);
|
||||||
assert.include(option_keys, "option", "Static option missing");
|
assert.include(option_keys, "option", "Static option missing");
|
||||||
assert.includeMembers(option_keys, ["1", "2", "option"], "Option mis-match");
|
assert.includeMembers(option_keys, ["1", "2", "option"], "Option mis-match");
|
||||||
assert.equal(option_keys.length, 3);
|
assert.equal(option_keys.length, 3);
|
||||||
@ -136,9 +137,9 @@ describe("Select widget", () =>
|
|||||||
// @ts-ignore TypeScript is not recognizing that this widget is a LitElement
|
// @ts-ignore TypeScript is not recognizing that this widget is a LitElement
|
||||||
await elementUpdated(element);
|
await elementUpdated(element);
|
||||||
|
|
||||||
// Now check
|
// Now check - value is preferred over get_value()
|
||||||
assert.equal(element.get_value(), test_value, "Wrong value from widget");
|
assert.equal(element.get_value(), test_value, "Wrong value from widget");
|
||||||
assert.equal(element.querySelector("select").value, test_value, "Wrong value in DOM")
|
assert.equal(element.value, test_value, "Wrong value from widget");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user