@idevs/corelib 0.0.83 → 0.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,10 +3,28 @@ export type CheckboxButtonEditorOptions = {
|
|
|
3
3
|
enumKey?: string;
|
|
4
4
|
enumType?: any;
|
|
5
5
|
lookupKey?: string;
|
|
6
|
+
isStringId?: boolean;
|
|
6
7
|
};
|
|
7
8
|
export declare class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> implements IReadOnly {
|
|
9
|
+
private _items;
|
|
10
|
+
private readonly _idField;
|
|
11
|
+
private readonly _textField;
|
|
12
|
+
private readonly _isStringId;
|
|
8
13
|
constructor(input: JQuery, opt: CheckboxButtonEditorOptions);
|
|
14
|
+
protected renderCheckboxes(): void;
|
|
9
15
|
protected addCheckbox(value: string, text: string): void;
|
|
16
|
+
get_items(): Array<{
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}>;
|
|
19
|
+
get items(): Array<{
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}>;
|
|
22
|
+
set_items(value: Array<{
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}>): void;
|
|
25
|
+
set items(v: Array<{
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}>);
|
|
10
28
|
get_value(): string;
|
|
11
29
|
get value(): string;
|
|
12
30
|
set_value(value: string): void;
|
|
@@ -16,15 +16,12 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
16
16
|
if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
+
this._isStringId = this.options.isStringId;
|
|
19
20
|
if (!isEmptyOrNull(this.options.lookupKey)) {
|
|
20
21
|
const lookup = getLookup(this.options.lookupKey);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const idValue = item[lookup.idField];
|
|
25
|
-
const id = idValue == null ? '' : idValue.toString();
|
|
26
|
-
this.addCheckbox(id, text);
|
|
27
|
-
}
|
|
22
|
+
this._idField = lookup.idField;
|
|
23
|
+
this._textField = lookup.textField;
|
|
24
|
+
this.set_items(lookup.items);
|
|
28
25
|
}
|
|
29
26
|
else {
|
|
30
27
|
const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey);
|
|
@@ -43,6 +40,16 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
43
40
|
}
|
|
44
41
|
this.element.addClass('d-flex flex-wrap');
|
|
45
42
|
}
|
|
43
|
+
renderCheckboxes() {
|
|
44
|
+
this.element.children('div').remove();
|
|
45
|
+
for (const item of this._items) {
|
|
46
|
+
const textValue = item[this._textField];
|
|
47
|
+
const text = textValue == null ? '' : textValue.toString();
|
|
48
|
+
const idValue = item[this._idField];
|
|
49
|
+
const id = idValue == null ? '' : idValue.toString();
|
|
50
|
+
this.addCheckbox(id, text);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
46
53
|
addCheckbox(value, text) {
|
|
47
54
|
const div = $('<div class="col-12 col-sm-6 col-md-4 col-xl-3" />');
|
|
48
55
|
const label = $('<label/>').text(text);
|
|
@@ -54,10 +61,23 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
54
61
|
label.appendTo(div);
|
|
55
62
|
div.appendTo(this.element);
|
|
56
63
|
}
|
|
64
|
+
get_items() {
|
|
65
|
+
return this._items;
|
|
66
|
+
}
|
|
67
|
+
get items() {
|
|
68
|
+
return this.get_items();
|
|
69
|
+
}
|
|
70
|
+
set_items(value) {
|
|
71
|
+
this._items = value;
|
|
72
|
+
this.renderCheckboxes();
|
|
73
|
+
}
|
|
74
|
+
set items(v) {
|
|
75
|
+
this.set_items(v);
|
|
76
|
+
}
|
|
57
77
|
get_value() {
|
|
58
78
|
const val = [];
|
|
59
79
|
this.element.find('input:checked').each((i, e) => {
|
|
60
|
-
val.push(toId($(e).val()));
|
|
80
|
+
val.push(this._isStringId ? $(e).val() : toId($(e).val()));
|
|
61
81
|
});
|
|
62
82
|
return val.join(',');
|
|
63
83
|
}
|
|
@@ -67,8 +87,9 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
67
87
|
set_value(value) {
|
|
68
88
|
if (value !== this.get_value()) {
|
|
69
89
|
let values = [];
|
|
70
|
-
if (!isEmptyOrNull(value))
|
|
71
|
-
values = value.split(',').map(p => Number(p));
|
|
90
|
+
if (!isEmptyOrNull(value)) {
|
|
91
|
+
values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p));
|
|
92
|
+
}
|
|
72
93
|
const inputs = this.element.find('input');
|
|
73
94
|
inputs.each((i, e) => {
|
|
74
95
|
;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkboxButtonEditor.js","sourceRoot":"","sources":["../../src/editors/checkboxButtonEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n// reference: https://github-wiki-see.page/m/serenity-is/Serenity/wiki/CheckBox-Group-Editor\n\nimport { Decorators, EnumKeyAttribute, EnumTypeRegistry, IReadOnly, Widget } from '@serenity-is/corelib'\nimport {\n coalesce,\n Enum,\n getAttributes,\n getLookup,\n isArray,\n isEmptyOrNull,\n toId,\n tryGetText,\n} from '@serenity-is/corelib/q'\nimport Element = Decorators.element\n\nexport type CheckboxButtonEditorOptions = {\n enumKey?: string\n enumType?: any\n lookupKey?: string\n}\n\n@Decorators.registerEditor('CheckboxButtonEditor')\n@Element('<div/>')\nexport class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> implements IReadOnly {\n constructor(input: JQuery, opt: CheckboxButtonEditorOptions) {\n super(input, opt)\n\n if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {\n return\n }\n\n if (!isEmptyOrNull(this.options.lookupKey)) {\n const lookup = getLookup(this.options.lookupKey)\n for (const item of lookup.items as Array<{ [key: string]: any }>) {\n const textValue = item[lookup.textField]\n const text = textValue == null ? '' : textValue.toString()\n const idValue = item[lookup.idField]\n const id = idValue == null ? '' : idValue.toString()\n this.addCheckbox(id, text)\n }\n } else {\n const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey)\n let enumKey = this.options.enumKey\n\n if (enumKey == null && enumType != null) {\n const enumKeyAttr = getAttributes(enumType, EnumKeyAttribute, false)\n if (enumKeyAttr.length > 0) {\n enumKey = enumKeyAttr[0].value\n }\n }\n const values = Enum.getValues(enumType)\n for (const x of values) {\n const name = Enum.toString(enumType, x)\n this.addCheckbox(x.toString(), coalesce(tryGetText('Enums.' + enumKey + '.' + name), name))\n }\n }\n\n this.element.addClass('d-flex flex-wrap')\n }\n\n protected addCheckbox(value: string, text: string) {\n const div = $('<div class=\"col-12 col-sm-6 col-md-4 col-xl-3\" />')\n const label = $('<label/>').text(text)\n $('<input type=\"checkbox\" class=\"me-2\"/>')\n .attr('name', this.uniqueName)\n .attr('id', this.uniqueName + '_' + value)\n .attr('value', value)\n .prependTo(label)\n label.appendTo(div)\n div.appendTo(this.element)\n }\n\n get_value(): string {\n const val: number[] = []\n this.element.find('input:checked').each((i, e) => {\n val.push(toId($(e).val()))\n })\n return val.join(',')\n }\n\n get value(): string {\n return this.get_value()\n }\n\n set_value(value: string): void {\n if (value !== this.get_value()) {\n let values: number[] = []\n if (!isEmptyOrNull(value)) values = value.split(',').map(p => Number(p))\n const inputs = this.element.find('input')\n inputs.each((i, e) => {\n ;(e as HTMLInputElement).checked = false\n })\n\n if (isArray(values)) {\n values.forEach(v => {\n const checks = inputs.filter('[value=' + v + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n })\n } else {\n const checks = inputs.filter('[value=' + values + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n }\n }\n }\n\n set value(v: string) {\n this.set_value(v)\n }\n\n get_readOnly(): boolean {\n return this.element.attr('disabled') != null\n }\n\n set_readOnly(value: boolean): void {\n if (this.get_readOnly() !== value) {\n if (value) {\n this.element.attr('disabled', 'disabled').find('input').attr('disabled', 'disabled')\n } else {\n this.element.removeAttr('disabled').find('input').removeAttr('disabled')\n }\n }\n }\n}\n\nexport class idevsEditors {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public static load() {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"checkboxButtonEditor.js","sourceRoot":"","sources":["../../src/editors/checkboxButtonEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n// reference: https://github-wiki-see.page/m/serenity-is/Serenity/wiki/CheckBox-Group-Editor\n\nimport { Decorators, EnumKeyAttribute, EnumTypeRegistry, IReadOnly, Widget } from '@serenity-is/corelib'\nimport {\n coalesce,\n Enum,\n getAttributes,\n getLookup,\n isArray,\n isEmptyOrNull,\n toId,\n tryGetText,\n} from '@serenity-is/corelib/q'\nimport Element = Decorators.element\n\nexport type CheckboxButtonEditorOptions = {\n enumKey?: string\n enumType?: any\n lookupKey?: string\n isStringId?: boolean\n}\n\n@Decorators.registerEditor('CheckboxButtonEditor')\n@Element('<div/>')\nexport class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> implements IReadOnly {\n private _items: Array<{ [key: string]: any }>\n private readonly _idField: string\n private readonly _textField: string\n private readonly _isStringId: boolean\n\n constructor(input: JQuery, opt: CheckboxButtonEditorOptions) {\n super(input, opt)\n\n if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {\n return\n }\n\n this._isStringId = this.options.isStringId\n\n if (!isEmptyOrNull(this.options.lookupKey)) {\n const lookup = getLookup(this.options.lookupKey)\n this._idField = lookup.idField\n this._textField = lookup.textField\n this.set_items(lookup.items as Array<{ [key: string]: any }>)\n } else {\n const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey)\n let enumKey = this.options.enumKey\n\n if (enumKey == null && enumType != null) {\n const enumKeyAttr = getAttributes(enumType, EnumKeyAttribute, false)\n if (enumKeyAttr.length > 0) {\n enumKey = enumKeyAttr[0].value\n }\n }\n const values = Enum.getValues(enumType)\n for (const x of values) {\n const name = Enum.toString(enumType, x)\n this.addCheckbox(x.toString(), coalesce(tryGetText('Enums.' + enumKey + '.' + name), name))\n }\n }\n\n this.element.addClass('d-flex flex-wrap')\n }\n\n protected renderCheckboxes() {\n this.element.children('div').remove()\n\n for (const item of this._items) {\n const textValue = item[this._textField]\n const text = textValue == null ? '' : textValue.toString()\n const idValue = item[this._idField]\n const id = idValue == null ? '' : idValue.toString()\n this.addCheckbox(id, text)\n }\n }\n\n protected addCheckbox(value: string, text: string) {\n const div = $('<div class=\"col-12 col-sm-6 col-md-4 col-xl-3\" />')\n const label = $('<label/>').text(text)\n $('<input type=\"checkbox\" class=\"me-2\"/>')\n .attr('name', this.uniqueName)\n .attr('id', this.uniqueName + '_' + value)\n .attr('value', value)\n .prependTo(label)\n label.appendTo(div)\n div.appendTo(this.element)\n }\n\n get_items(): Array<{ [key: string]: any }> {\n return this._items\n }\n\n get items(): Array<{ [key: string]: any }> {\n return this.get_items()\n }\n\n set_items(value: Array<{ [key: string]: any }>) {\n this._items = value\n this.renderCheckboxes()\n }\n\n set items(v: Array<{ [key: string]: any }>) {\n this.set_items(v)\n }\n\n get_value(): string {\n const val: unknown[] = []\n this.element.find('input:checked').each((i, e) => {\n val.push(this._isStringId ? $(e).val() : toId($(e).val()))\n })\n return val.join(',')\n }\n\n get value(): string {\n return this.get_value()\n }\n\n set_value(value: string): void {\n if (value !== this.get_value()) {\n let values: unknown[] = []\n if (!isEmptyOrNull(value)) {\n values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p))\n }\n const inputs = this.element.find('input')\n inputs.each((i, e) => {\n ;(e as HTMLInputElement).checked = false\n })\n\n if (isArray(values)) {\n values.forEach(v => {\n const checks = inputs.filter('[value=' + v + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n })\n } else {\n const checks = inputs.filter('[value=' + values + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n }\n }\n }\n\n set value(v: string) {\n this.set_value(v)\n }\n\n get_readOnly(): boolean {\n return this.element.attr('disabled') != null\n }\n\n set_readOnly(value: boolean): void {\n if (this.get_readOnly() !== value) {\n if (value) {\n this.element.attr('disabled', 'disabled').find('input').attr('disabled', 'disabled')\n } else {\n this.element.removeAttr('disabled').find('input').removeAttr('disabled')\n }\n }\n }\n}\n\nexport class idevsEditors {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public static load() {}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -19,11 +19,17 @@ export type CheckboxButtonEditorOptions = {
|
|
|
19
19
|
enumKey?: string
|
|
20
20
|
enumType?: any
|
|
21
21
|
lookupKey?: string
|
|
22
|
+
isStringId?: boolean
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
@Decorators.registerEditor('CheckboxButtonEditor')
|
|
25
26
|
@Element('<div/>')
|
|
26
27
|
export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> implements IReadOnly {
|
|
28
|
+
private _items: Array<{ [key: string]: any }>
|
|
29
|
+
private readonly _idField: string
|
|
30
|
+
private readonly _textField: string
|
|
31
|
+
private readonly _isStringId: boolean
|
|
32
|
+
|
|
27
33
|
constructor(input: JQuery, opt: CheckboxButtonEditorOptions) {
|
|
28
34
|
super(input, opt)
|
|
29
35
|
|
|
@@ -31,15 +37,13 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
31
37
|
return
|
|
32
38
|
}
|
|
33
39
|
|
|
40
|
+
this._isStringId = this.options.isStringId
|
|
41
|
+
|
|
34
42
|
if (!isEmptyOrNull(this.options.lookupKey)) {
|
|
35
43
|
const lookup = getLookup(this.options.lookupKey)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const idValue = item[lookup.idField]
|
|
40
|
-
const id = idValue == null ? '' : idValue.toString()
|
|
41
|
-
this.addCheckbox(id, text)
|
|
42
|
-
}
|
|
44
|
+
this._idField = lookup.idField
|
|
45
|
+
this._textField = lookup.textField
|
|
46
|
+
this.set_items(lookup.items as Array<{ [key: string]: any }>)
|
|
43
47
|
} else {
|
|
44
48
|
const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey)
|
|
45
49
|
let enumKey = this.options.enumKey
|
|
@@ -60,6 +64,18 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
60
64
|
this.element.addClass('d-flex flex-wrap')
|
|
61
65
|
}
|
|
62
66
|
|
|
67
|
+
protected renderCheckboxes() {
|
|
68
|
+
this.element.children('div').remove()
|
|
69
|
+
|
|
70
|
+
for (const item of this._items) {
|
|
71
|
+
const textValue = item[this._textField]
|
|
72
|
+
const text = textValue == null ? '' : textValue.toString()
|
|
73
|
+
const idValue = item[this._idField]
|
|
74
|
+
const id = idValue == null ? '' : idValue.toString()
|
|
75
|
+
this.addCheckbox(id, text)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
63
79
|
protected addCheckbox(value: string, text: string) {
|
|
64
80
|
const div = $('<div class="col-12 col-sm-6 col-md-4 col-xl-3" />')
|
|
65
81
|
const label = $('<label/>').text(text)
|
|
@@ -72,10 +88,27 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
72
88
|
div.appendTo(this.element)
|
|
73
89
|
}
|
|
74
90
|
|
|
91
|
+
get_items(): Array<{ [key: string]: any }> {
|
|
92
|
+
return this._items
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
get items(): Array<{ [key: string]: any }> {
|
|
96
|
+
return this.get_items()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
set_items(value: Array<{ [key: string]: any }>) {
|
|
100
|
+
this._items = value
|
|
101
|
+
this.renderCheckboxes()
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
set items(v: Array<{ [key: string]: any }>) {
|
|
105
|
+
this.set_items(v)
|
|
106
|
+
}
|
|
107
|
+
|
|
75
108
|
get_value(): string {
|
|
76
|
-
const val:
|
|
109
|
+
const val: unknown[] = []
|
|
77
110
|
this.element.find('input:checked').each((i, e) => {
|
|
78
|
-
val.push(toId($(e).val()))
|
|
111
|
+
val.push(this._isStringId ? $(e).val() : toId($(e).val()))
|
|
79
112
|
})
|
|
80
113
|
return val.join(',')
|
|
81
114
|
}
|
|
@@ -86,8 +119,10 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
86
119
|
|
|
87
120
|
set_value(value: string): void {
|
|
88
121
|
if (value !== this.get_value()) {
|
|
89
|
-
let values:
|
|
90
|
-
if (!isEmptyOrNull(value))
|
|
122
|
+
let values: unknown[] = []
|
|
123
|
+
if (!isEmptyOrNull(value)) {
|
|
124
|
+
values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p))
|
|
125
|
+
}
|
|
91
126
|
const inputs = this.element.find('input')
|
|
92
127
|
inputs.each((i, e) => {
|
|
93
128
|
;(e as HTMLInputElement).checked = false
|