loon-bulma-react 2022.1.0 → 2022.1.4
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 +50 -10
- package/dist/components/DataTable/DataTableProps.d.ts +11 -1
- package/dist/components/Form/BaseInputProps.d.ts +1 -1
- 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 +1131 -655
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +1131 -655
- package/dist/index.modern.js.map +1 -1
- package/package.json +3 -3
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,12 +462,44 @@ 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
|
|
|
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
|
|
494
|
+
|
|
464
495
|
Om eigen classes toe te voegen aan rows en aan columns zijn er methodes:
|
|
465
496
|
|
|
466
497
|
- op de DataTable props zit de `rowClasses` function voor classes op de `<tr>`.
|
|
467
498
|
- op de DataTableColum props zit de `columnClasses` function voor classes op de `<td>`.
|
|
468
499
|
De gebruikte classes kunnen in een globale css file of in een lokaal geïmporteerde file staan (zoals hieronder).
|
|
469
|
-
> LET OP
|
|
500
|
+
> #### LET OP!
|
|
501
|
+
>
|
|
502
|
+
> in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
|
|
470
503
|
|
|
471
504
|
```css
|
|
472
505
|
/** datatable.styles.css */
|
|
@@ -486,28 +519,28 @@ const nameSortFn = (a: any, b: any) => {
|
|
|
486
519
|
const aNaam = a.first_name + ' ' + a.last_name;
|
|
487
520
|
const bNaam = b.first_name + ' ' + b.last_name;
|
|
488
521
|
if (aNaam < bNaam) return -1;
|
|
489
|
-
if (aNaam > bNaam) return 1;
|
|
490
|
-
return 0;
|
|
522
|
+
else if (aNaam > bNaam) return 1;
|
|
523
|
+
else return 0;
|
|
491
524
|
};
|
|
492
525
|
|
|
493
|
-
const
|
|
526
|
+
const columns = [
|
|
494
527
|
{ sort: true, value: 'id' },
|
|
495
528
|
{
|
|
496
529
|
header: 'Naam',
|
|
497
530
|
sort: nameSortFn,
|
|
498
531
|
value: (v: any) => `${v.first_name} ${v.last_name}`,
|
|
499
532
|
},
|
|
500
|
-
{ header: 'Voornaam', sort:
|
|
501
|
-
{ header: 'Achternaam', sort: true
|
|
533
|
+
{ header: 'Voornaam', sort: false, value: 'first_name' },
|
|
534
|
+
{ header: 'Achternaam', sort: true value: 'last_name' },
|
|
502
535
|
{
|
|
503
536
|
value: 'email',
|
|
504
537
|
columnClasses: (usr) => (usr.email.includes('.com') ? 'is-marked' : ''),
|
|
505
538
|
},
|
|
539
|
+
{ header: 'Active', sort: true, value: 'is_active'}
|
|
506
540
|
{ header: 'Geslacht', sort: true, value: 'gender' },
|
|
507
541
|
{ header: 'Taal', sort: true, value: 'language' },
|
|
508
542
|
{
|
|
509
543
|
header: '',
|
|
510
|
-
sort: false,
|
|
511
544
|
value: () => <InvertedButton.Danger>DEL</InvertedButton.Danger>,
|
|
512
545
|
},
|
|
513
546
|
];
|
|
@@ -526,7 +559,9 @@ export function DataTableTab() {
|
|
|
526
559
|
<DataTable
|
|
527
560
|
data={data}
|
|
528
561
|
columns={columns}
|
|
562
|
+
onSearch={(term: string, users: IUser[]) => users.filter((u) => u.language.startsWith(term))}
|
|
529
563
|
onRowSelected={(i, r) => handleRowClick(i, r)}
|
|
564
|
+
defaultSortCol="Naam"
|
|
530
565
|
rowClasses={(item: IUser) => (item.first_name.startsWith('C') ? 'is-dangerous' : '')}
|
|
531
566
|
searchTxt="Zoek een persoon ..."
|
|
532
567
|
rowIdentifier="id"
|
|
@@ -535,6 +570,11 @@ export function DataTableTab() {
|
|
|
535
570
|
narrow={false}
|
|
536
571
|
maxRows={20}
|
|
537
572
|
bordered={false}
|
|
573
|
+
headerContent={
|
|
574
|
+
<Button.Primary>Add</Button.Primary>
|
|
575
|
+
<Button.Warning>Change</Button.Warning>
|
|
576
|
+
<Button.Success>Refresh</Button.Success>
|
|
577
|
+
}
|
|
538
578
|
/>
|
|
539
579
|
);
|
|
540
580
|
}
|
|
@@ -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,5 @@ 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
48
|
};
|
|
@@ -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[];
|