loon-bulma-react 2022.1.1 → 2022.1.5
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.
- package/README.md +46 -24
- package/dist/components/Button/ButtonBase.d.ts +1 -1
- package/dist/components/Button/ButtonProps.d.ts +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +0 -8
- package/dist/components/DataTable/DataTableProps.d.ts +11 -1
- package/dist/components/Form/BaseInputProps.d.ts +29 -1
- package/dist/components/Form/FormProps.d.ts +5 -2
- package/dist/components/Form/MultiSelect.d.ts +1 -0
- package/dist/components/Form/Select.d.ts +1 -1
- package/dist/components/Form/SelectProps.d.ts +7 -0
- package/dist/index.js +1409 -1320
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1409 -1320
- package/dist/index.modern.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -91,9 +91,10 @@ Dan wordt altijd de laatste versie van die tag geïnstalleerd, in plaats van de
|
|
|
91
91
|
> De Major versies beginnen met het jaar waar ze bijhoren. dus de versie voor Loon-2021 is `2021.*.*`
|
|
92
92
|
> Er zijn nu 3 major versies.
|
|
93
93
|
>
|
|
94
|
-
> - y2020 --> Testversie voor 2020
|
|
95
|
-
> - y2021 --> Versie
|
|
96
|
-
> -
|
|
94
|
+
> - `@y2020` --> Testversie voor **2020**, installeren met `npm install loon-bulma-react@y2021`.
|
|
95
|
+
> - `@y2021` --> Versie voor **2021**, installeren met `npm install loon-bulma-react@y2021`.
|
|
96
|
+
> - `@y2022` --> Versie voor **2022**, installeren met `npm install loon-bulma-react@y2022`. Zelfde als `latest`
|
|
97
|
+
> - `@latest` --> Default versie die geïnstalleerd wordt met `npm install loon-bulma-react`
|
|
97
98
|
|
|
98
99
|
## Gebruik <a id="gebruik"></a>
|
|
99
100
|
|
|
@@ -461,16 +462,35 @@ import { ButtonGroup, Bttn, Button, LightButton, InvertedButton, OutlinedButton
|
|
|
461
462
|
|
|
462
463
|
Een DataTable is een tabel met een maximaal aantal rijen waarin je kan zoeken en sorteren. Voor een gewone, saaie, normale tabel kan je de [Table](#component-table) gebruiken. Voor re-renderen van de tabel moet de `data`-prop wel state zijn, anders werkt het rerenderen niet. Hetzelfde geld voor de `columns`-prop.
|
|
463
464
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
>
|
|
473
|
-
|
|
465
|
+
#### Sorteren
|
|
466
|
+
|
|
467
|
+
Het sorteren is aangepast. Om een column sorteerbaar te maken, moet je een van de onderstaande 4 waarden opgeven:
|
|
468
|
+
|
|
469
|
+
- false: deze kolom is **niet** sorteerbaar _(default)_
|
|
470
|
+
- true: deze kolom is sorteerbaar.
|
|
471
|
+
- `'function'`: sorteer deze kolom met deze `function`.
|
|
472
|
+
|
|
473
|
+
##### <em>LET OP
|
|
474
|
+
|
|
475
|
+
Als deze kolom JSX-Elementen bevat, _MOET_ er een sort-function worden opgegeven om wel te kunnen sorteren.</em>
|
|
476
|
+
|
|
477
|
+
#### Search
|
|
478
|
+
|
|
479
|
+
Er is een ingebouwde zoekfunctie die _alle_ kolommen doorzoekt voor gefilterede items. Het is ook mogelijk om een _eigen_ zoek-function toe te voegen. Als die is gedefinieerd wordt de default zoek-methode _niet_ gebruikt. Door op de props van de `<DataTable />` de prop `onSearch` aan te vullen met een function, gebruik je je eigen zoekfunctie. De Zoekfunctie ziet er zo uit:
|
|
480
|
+
|
|
481
|
+
```ts
|
|
482
|
+
type search = (searchTerm: string, items: T[]) => T[];
|
|
483
|
+
|
|
484
|
+
const mySearch = (s: string, users: IUser[]): IUser[] => {
|
|
485
|
+
return users.filter((u) => u.name.toLowerCase().includes(s.toLowerCase()));
|
|
486
|
+
};
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
- _@param_ searchTerm: de zoekterm in het zoek-veld van de datatable
|
|
490
|
+
- _@param_ items: de items waarin gezocht / gefilterd moet worden
|
|
491
|
+
- _@returns_: de gefilterde items
|
|
492
|
+
|
|
493
|
+
#### Custom classes
|
|
474
494
|
|
|
475
495
|
Om eigen classes toe te voegen aan rows en aan columns zijn er methodes:
|
|
476
496
|
|
|
@@ -504,21 +524,21 @@ const nameSortFn = (a: any, b: any) => {
|
|
|
504
524
|
};
|
|
505
525
|
|
|
506
526
|
const columns = [
|
|
507
|
-
{ sort:
|
|
527
|
+
{ sort: true, value: 'id' },
|
|
508
528
|
{
|
|
509
529
|
header: 'Naam',
|
|
510
530
|
sort: nameSortFn,
|
|
511
531
|
value: (v: any) => `${v.first_name} ${v.last_name}`,
|
|
512
532
|
},
|
|
513
|
-
{ header: 'Voornaam', sort:
|
|
514
|
-
{ header: 'Achternaam', sort:
|
|
533
|
+
{ header: 'Voornaam', sort: false, value: 'first_name' },
|
|
534
|
+
{ header: 'Achternaam', sort: true value: 'last_name' },
|
|
515
535
|
{
|
|
516
536
|
value: 'email',
|
|
517
537
|
columnClasses: (usr) => (usr.email.includes('.com') ? 'is-marked' : ''),
|
|
518
538
|
},
|
|
519
|
-
{ header: 'Active', sort:
|
|
520
|
-
{ header: 'Geslacht', sort:
|
|
521
|
-
{ header: 'Taal', sort:
|
|
539
|
+
{ header: 'Active', sort: true, value: 'is_active'}
|
|
540
|
+
{ header: 'Geslacht', sort: true, value: 'gender' },
|
|
541
|
+
{ header: 'Taal', sort: true, value: 'language' },
|
|
522
542
|
{
|
|
523
543
|
header: '',
|
|
524
544
|
value: () => <InvertedButton.Danger>DEL</InvertedButton.Danger>,
|
|
@@ -538,13 +558,10 @@ export function DataTableTab() {
|
|
|
538
558
|
return (
|
|
539
559
|
<DataTable
|
|
540
560
|
data={data}
|
|
541
|
-
headerContent={
|
|
542
|
-
<Button.Primary>Add</Button.Primary>
|
|
543
|
-
<Button.Warning>Change</Button.Warning>
|
|
544
|
-
<Button.Success>Refresh</Button.Success>
|
|
545
|
-
}
|
|
546
561
|
columns={columns}
|
|
562
|
+
onSearch={(term: string, users: IUser[]) => users.filter((u) => u.language.startsWith(term))}
|
|
547
563
|
onRowSelected={(i, r) => handleRowClick(i, r)}
|
|
564
|
+
defaultSortCol="Naam"
|
|
548
565
|
rowClasses={(item: IUser) => (item.first_name.startsWith('C') ? 'is-dangerous' : '')}
|
|
549
566
|
searchTxt="Zoek een persoon ..."
|
|
550
567
|
rowIdentifier="id"
|
|
@@ -553,6 +570,11 @@ export function DataTableTab() {
|
|
|
553
570
|
narrow={false}
|
|
554
571
|
maxRows={20}
|
|
555
572
|
bordered={false}
|
|
573
|
+
headerContent={
|
|
574
|
+
<Button.Primary>Add</Button.Primary>
|
|
575
|
+
<Button.Warning>Change</Button.Warning>
|
|
576
|
+
<Button.Success>Refresh</Button.Success>
|
|
577
|
+
}
|
|
556
578
|
/>
|
|
557
579
|
);
|
|
558
580
|
}
|
|
@@ -8,7 +8,7 @@ import { ButtonProps } from './ButtonProps';
|
|
|
8
8
|
* @returns
|
|
9
9
|
*/
|
|
10
10
|
export declare function BaseButton(props: {
|
|
11
|
-
|
|
11
|
+
onClick?(e: any): any | void;
|
|
12
12
|
children?: ReactNode;
|
|
13
13
|
type?: 'submit' | 'button' | 'reset' | undefined;
|
|
14
14
|
disabled?: boolean | undefined;
|
|
@@ -9,7 +9,7 @@ export declare type ButtonProps = {
|
|
|
9
9
|
/** wat moet er op de button komen (text, icons etc.) */
|
|
10
10
|
children?: ReactNode;
|
|
11
11
|
/** button type: <button type="..."> */
|
|
12
|
-
type?: 'submit' | 'button' | 'reset'
|
|
12
|
+
type?: 'submit' | 'button' | 'reset';
|
|
13
13
|
/** de grootte van de button */
|
|
14
14
|
size?: SizeProp;
|
|
15
15
|
/** is de buttton disabled? */
|
|
@@ -5,16 +5,8 @@ export declare type ButtonGroupProps = {
|
|
|
5
5
|
children?: ReactNode;
|
|
6
6
|
/** Moeten de buttons aan elkaar vast gezet worden (default = false) */
|
|
7
7
|
merge?: boolean;
|
|
8
|
-
/** aan welke kant moeten de buttons aligned worden (default = (l)eft)
|
|
9
|
-
* @deprecated use alignment
|
|
10
|
-
*/
|
|
11
|
-
align?: AlignmentProp | undefined;
|
|
12
8
|
/** aan welke kant moeten de buttons aligned worden (default = l) */
|
|
13
9
|
alignment?: AlignmentProp | undefined;
|
|
14
|
-
/** hoe groot moeten de buttons worden (default = normal)
|
|
15
|
-
* @deprecated: use 'size'
|
|
16
|
-
*/
|
|
17
|
-
sizing?: SizeProp;
|
|
18
10
|
/** hoe groot moeten de buttons worden (default = normal) */
|
|
19
11
|
size?: SizeProp;
|
|
20
12
|
};
|
|
@@ -4,6 +4,9 @@ import { AlignmentProp } from '../..';
|
|
|
4
4
|
export declare type DataTableProps<T extends unknown> = {
|
|
5
5
|
/** Titels voor de kolommen als die afwijken van de object-properties */
|
|
6
6
|
columns: DataTableColumn<T>[];
|
|
7
|
+
/** header-name van de default-sorteer-kolom (default: 1e kolom die 'sortable' is) */
|
|
8
|
+
defaultSortCol?: string;
|
|
9
|
+
/** (optionele) content voor de header. Verschijnt links van de search-bar */
|
|
7
10
|
headerContent?: React.ReactNode;
|
|
8
11
|
/** De array met daarin de data voor de datatabel */
|
|
9
12
|
data: T[];
|
|
@@ -28,6 +31,13 @@ export declare type DataTableProps<T extends unknown> = {
|
|
|
28
31
|
maxRows?: number;
|
|
29
32
|
/** placeholder voor zoekveld. Als er geen placeholder is (undefined or emptystring), is er geen zoek-veld */
|
|
30
33
|
searchTxt?: string;
|
|
34
|
+
/**
|
|
35
|
+
* (Optionele) eigen zoek-functie. De default-zoek-functie wordt dan vervangen.
|
|
36
|
+
* @param searchTerm de content van het zoekveld
|
|
37
|
+
* @param items de items waarbinnen gezocht moet worden
|
|
38
|
+
* @returns een array met de gefilterde items
|
|
39
|
+
*/
|
|
40
|
+
onSearch?: (searchTerm: string, items: T[]) => T[];
|
|
31
41
|
/** terugkoppeling voor een geselecteerde rij.
|
|
32
42
|
* @param item: Het geselecteerde item
|
|
33
43
|
* @param row: de tabel-rij waarop geklikt is (<tr> tag). Om de row 'selected' te laten lijken: toggle de 'is-selected' class
|
|
@@ -70,7 +80,7 @@ export declare type DataTableColumn<T> = {
|
|
|
70
80
|
* - boolean: sorteer op true/false
|
|
71
81
|
* - function: een eigen sorteermechanisme
|
|
72
82
|
*/
|
|
73
|
-
sort?:
|
|
83
|
+
sort?: true | false | ((a: T, B: T) => -1 | 0 | 1 | number);
|
|
74
84
|
/** Wat is de object property die bij deze kolom hoort als je wil sorteren
|
|
75
85
|
* - string: de object-property-key --> obj['colValue']
|
|
76
86
|
* - function: samenstellen van de waarde.
|
|
@@ -44,5 +44,33 @@ export declare type FormValidationType = {
|
|
|
44
44
|
* @param val de nieuwe te valideren waarde
|
|
45
45
|
* @returns een string met daarin de foutmelding OF een lege string voor een valid waarde.
|
|
46
46
|
*/
|
|
47
|
-
onValidate?: (val: string | string[] | number | boolean | Date) => string;
|
|
47
|
+
onValidate?: (val: string | string[] | number | number[] | boolean | Date) => string;
|
|
48
|
+
};
|
|
49
|
+
export declare type BaseState = {
|
|
50
|
+
/** de naam die in foutmeldingen komt */
|
|
51
|
+
description: string;
|
|
52
|
+
/** de fout-melding, '' voor valid */
|
|
53
|
+
invalidMsg: string;
|
|
54
|
+
/** is de waarde invalid */
|
|
55
|
+
valid: boolean;
|
|
56
|
+
/** is de input aangeraakt */
|
|
57
|
+
touched: boolean;
|
|
58
|
+
/** validatie-object voor deze input */
|
|
59
|
+
validation?: FormValidationType;
|
|
60
|
+
};
|
|
61
|
+
export declare type BaseChangeStateType = {
|
|
62
|
+
type: 'CHANGE';
|
|
63
|
+
invalidMsg: string;
|
|
64
|
+
};
|
|
65
|
+
export declare type BaseTouchStateType = {
|
|
66
|
+
type: 'TOUCH';
|
|
67
|
+
touched: boolean;
|
|
68
|
+
};
|
|
69
|
+
export declare type BaseSetStateType = {
|
|
70
|
+
type: 'SET';
|
|
71
|
+
validation?: FormValidationType;
|
|
72
|
+
};
|
|
73
|
+
export declare type BaseFocusStateType = {
|
|
74
|
+
type: 'FOCUS';
|
|
75
|
+
focus: boolean;
|
|
48
76
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ColorProp } from '../../loon-react-bulma-types';
|
|
1
2
|
import { FormValidationType } from './BaseInputProps';
|
|
2
3
|
import { SelectOptionGroupType, SelectOptionType } from './SelectProps';
|
|
3
4
|
/** Props voor de Form-component */
|
|
@@ -43,6 +44,8 @@ export declare type FormFieldProps = {
|
|
|
43
44
|
label?: string;
|
|
44
45
|
/** is het field gevalideerd en wat is daar de uitkomst van. */
|
|
45
46
|
placeholder?: string;
|
|
47
|
+
/** (optioneel) id van een field. Anders wordt de "name" gebruikt */
|
|
48
|
+
id?: string;
|
|
46
49
|
valid?: boolean;
|
|
47
50
|
/** de waarde van de input.
|
|
48
51
|
* Voor multi-range-inputs: een number[] van twee waarden: [valueA, valueB]
|
|
@@ -55,7 +58,7 @@ export declare type FormFieldProps = {
|
|
|
55
58
|
/** object gebruikt voot validatie */
|
|
56
59
|
validation?: FormValidationType;
|
|
57
60
|
/** input type: <input type="..." /> */
|
|
58
|
-
type: 'text' | 'number' | 'email' | 'password' | 'date' | 'datetime' | 'time' | 'textarea' | 'select' | 'checkbox' | 'tel' | 'url' | 'range' | 'multirange' | 'hidden';
|
|
61
|
+
type: 'text' | 'number' | 'email' | 'password' | 'date' | 'datetime' | 'time' | 'textarea' | 'select' | 'multiselect' | 'checkbox' | 'tel' | 'url' | 'range' | 'multirange' | 'hidden';
|
|
59
62
|
/** voor type 'number', 'time', 'range' en 'multirange' kan er een step-grootte worden opgegeven */
|
|
60
63
|
step?: number;
|
|
61
64
|
/** autocomplete voor gebruik met wachtwoorden, usernames & wachtwoordmanagers */
|
|
@@ -72,7 +75,7 @@ export declare type FormButton = {
|
|
|
72
75
|
/** button type <button type="..." */
|
|
73
76
|
type: 'submit' | 'reset' | 'button';
|
|
74
77
|
/** button color: s: success-button, d: danger-button, n: primarycolor button */
|
|
75
|
-
color?:
|
|
78
|
+
color?: ColorProp;
|
|
76
79
|
/** wat als er op de button geklikt wordt? (optional) */
|
|
77
80
|
onClick(e: MouseEvent): any | void;
|
|
78
81
|
};
|
|
@@ -7,6 +7,7 @@ export declare type MultiSelectInputProps = BaseInputProps & {
|
|
|
7
7
|
value?: string[];
|
|
8
8
|
/** de values voor de options. DEZE MOETEN UNIEK ZIJN! */
|
|
9
9
|
options: string[] | SelectOptionType[] | SelectOptionGroupType[];
|
|
10
|
+
/** de grootte van de multi-select */
|
|
10
11
|
size?: SizeProp;
|
|
11
12
|
/** aantal zichtbare rijen zonder scrollen */
|
|
12
13
|
rows?: number;
|
|
@@ -17,7 +17,7 @@ export declare type SelectInputProps = BaseInputProps & {
|
|
|
17
17
|
onValueChanged?(newVal: string | number, valid: boolean): void;
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
|
-
* Een
|
|
20
|
+
* Een select-input om een waarde te selecteren uit een lijstje
|
|
21
21
|
* - lijstje van strings
|
|
22
22
|
* - lijstje van {value: string, label: string, disabled: boolean}
|
|
23
23
|
* - lijstje van {value: string, label: string, disabled: boolean} per group (<optgroup>)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
export declare type SelectOptionType = {
|
|
2
3
|
/** de waarde van een option */
|
|
3
4
|
value: number | string;
|
|
@@ -12,3 +13,9 @@ export declare type SelectOptionGroupType = {
|
|
|
12
13
|
/** De options */
|
|
13
14
|
selectOptions: SelectOptionType[];
|
|
14
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Maak een <optgroup>...</optgroup> of <option>...</option> array voor een <select> of een multiselect
|
|
18
|
+
* @param options de options
|
|
19
|
+
* @returns JSX-elementen-array
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSelectOptions(options: string[] | SelectOptionType[] | SelectOptionGroupType[]): JSX.Element[];
|