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 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, installeren met `npm install loon-bulma-react@y2021`.
95
- > - y2021 --> Versie is voor 2021, installeren met `npm install loon-bulma-react@y2021`. Zelfde als `latest`
96
- > - latest --> Default versie die geïnstalleerd wordt met `npm install loon-bulma-react`
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: in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
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 dataTableHeaders = [
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: true, value: 'first_name' },
501
- { header: 'Achternaam', sort: true, value: 'last_name' },
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?: 'string' | 'number' | 'boolean' | ((a: T, B: T) => -1 | 0 | 1 | number);
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 sselect-input om een waarde te selecteren uit een lijstje
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[];